使用WPF中的UI进行后台工作是否更容易?
这对WinForms来说是一种痛苦,并且想要一种更简单的方法。我想做数据库工作,因为它正在进行数据库工作,我想用一个控件来填充数据库中发生的结果,并在完成后完成。
答案 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)。