提问人:Ice 提问时间:10/24/2023 更新时间:10/24/2023 访问量:30
EA 插件 - 从任务或线程进行 GUI 更新
EA Addin - GUI update from a task or a thread
问:
我在 C# 和 WPF (MVVM) 中创建了一个插件。 在我通过存储库运行了几个需要 8 秒的查询后,我需要更新 GUI。SQLQuery(...)。
为了不阻塞Enterprise Architect的主线程,我创建了一个任务来运行这些查询,最后我需要更新GUI。问题是 Application.Current.Dispacher 不起作用,因为 EA 没有提供 UI 线程调度器机制。
我怎样才能创建一个不阻塞主线程并在最后更新 GUI 的方法?
private ICommand _runAsyncButton;
public ICommand RunAsyncButton
=> _runAsyncButton ??
(_runAsyncButton =
new DelegateCommand(async p => await ExecuteSomethingAsync()));
private async Task ExecuteSomethingAsync()
{
await Task.Run(() => {
// taking 8 seconds
repository.SQLQuery(...)
repository.SQLQuery(...)
repository.SQLQuery(...)
if (Application.Current.Dispatcher != null)
Application.Current.Dispatcher.Invoke(() =>
{
// code to update the GUI is throwing an exception because Application.Current is null
});
});
}
答: 暂无答案
评论
SynchronizationContext
SynchronizationContext.Current