背景与UI工作

时间:2011-04-01 05:07:40

标签: c# .net wpf winforms multithreading

使用WPF中的UI进行后台工作是否更容易?

这对WinForms来说是一种痛苦,并且想要一种更简单的方法。我想做数据库工作,因为它正在进行数据库工作,我想用一个控件来填充数据库中发生的结果,并在完成后完成。

2 个答案:

答案 0 :(得分:1)

在WPF中的WinForms中,需要在UI线程上对UI控件进行更改。但是,在使用数据绑定的方式中,它可以变得更容易管理。例如,如果将UI绑定到某些属性,则可以从其他线程更改这些属性,并且绑定将采用其余线程。对于集合来说,它变得有点棘手,但是有一些线程安全的可观察集合实现,在.Net 4中有一些包含在框架中。您也可能对BackgroundWorker课程感兴趣。

答案 1 :(得分:1)

这是一个代码示例:

private void RunButton_Click(object sender, RoutedEventArgs e)
{
    ThreadPool.QueueUserWorkItem(
        delegate
        {
            // Do work

            Dispatcher.Invoke(new Action(
               delegate 
               { 
                   // Do UI stuff
               }));

            // Do more work

            Dispatcher.Invoke(new Action(
               delegate 
               { 
                   // Do UI stuff
               }));
        });
}

但请注意,如果在后台线程上抛出异常,则应用程序将终止。您应该在后台线程上捕获异常,并将它们重新抛出到UI线程上(再次使用Dispatcher)。