C#WPF更新UI应用程序冻结

时间:2017-04-24 11:25:19

标签: c# wpf multithreading data-binding

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

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

如果是。从webservice获取数据并更新到观察集合的最佳方式是什么..

代码: -

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();

1 个答案:

答案 0 :(得分:0)

UI线程是主线程。你不能复制它。如果你在ui线程上调用你的数据,你的应用程序用户界面将不会响应,直到它结束。所以,你需要创建后台线程或任务来处理数据调用webservices。当您从webservice获取数据时,将其传递给主线程(UI)。您可以使用Dispatcher

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

或者您可以使用更方便的async Task