EA 插件 - 从任务或线程进行 GUI 更新

EA Addin - GUI update from a task or a thread

提问人:Ice 提问时间:10/24/2023 更新时间:10/24/2023 访问量:30

问:

我在 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
                    });

     });
 }
加载项 Enterprise-Architect

评论

0赞 Stephen Cleary 10/24/2023
EA 是否提供 ?无论如何,我更喜欢调度员。SynchronizationContext
0赞 Ice 10/24/2023
我没有找到任何可以帮助我的东西
0赞 Stephen Cleary 10/24/2023
调用代码时的价值是什么?SynchronizationContext.Current
1赞 Geert Bellekens 10/24/2023
我为我的加载项使用了后台工作程序。现在可能有点老派,但它有效。有关详细信息,请参见 github.com/GeertBellekens/Enterprise-Architect-Toolpack/blob/...

答: 暂无答案