【问题标题】:C# WPF Update UI Application freezeC# WPF 更新 UI 应用程序冻结
【发布时间】:2017-04-24 11:25:19
【问题描述】:

在 C# 中,我们知道有多个后台线程......所以我们可以创建多个 UI 线程吗?

并且多个 UI 线程有助于在没有 freeez 的情况下更新观察集合中的数据?

如果没有。从 web 服务获取数据并更新到观察集合的最佳方法是什么..

代码:-

Thread lthrThread = new Thread((ThreadStart)delegate
{
       string Data = DataFromServer()
       this.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        UI freeze here for 5 -10 seconds
                    }));        
});
lthrThread.SetApartmentState(ApartmentState.STA);
lthrThread.Start();

【问题讨论】:

  • 你的问题对我来说没有意义。只有一个 UI 线程。你真正想问什么?
  • 嘿抱歉..实际上我想在从服务器获取数据后更新 UI 而不冻结....目前我正在使用线程进行服务器调用和使用 Dispatcher 的内部线程,但它冻结了 5-10 的 UI秒
  • 只要使用async/await
  • @MickyD 嘿,你能给我提供异步/等待的示例或参考吗?我是新来的……我想了解异步/等待
  • 更新代码请看一次

标签: c# wpf multithreading data-binding


【解决方案1】:

UI线程是主线程,不能复制webservices。当您从 webservice 获取数据时,将其传递给主线程 (UI)。你可以使用Dispatcher

Application.Current.Dispatcher?.BeginInvoke(new Action(() => {
 // Pass data to UI here.
}));

或者你可以使用async Task,这样会更方便。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-12-22
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2011-11-07
  • 2020-10-02
  • 1970-01-01
相关资源
最近更新 更多