WPF中的线程
本文关键字:线程 WPF | 更新日期: 2023-09-27 18:19:17
我有这样的程序
private void do_my_method_click(object sender, RoutedEventArgs e)
{
//there are some variables and methods here
//works fine
ThreadPool.QueueUserWorkItem(Start_method);
// when added gives error this thread owned by other thread
ThreadPool.QueueUserWorkItem(Start_method_2);
}
Start_method(object state)
{
}
Start_method_2(object state)
{
}
Start_method
的输出在Start_method_2
中使用,我不知道我到底在哪里出错了,我是WPF和c#的新手。
正如@Tudor所建议的,在Start_method_2
内,我认为您正在修改GUI。
使用System.Threading.SynchronizationContext.Current
,如果你正在修改的东西在主线程上工作的UI。下面是一个例子:
var sync = System.Threading.SynchronizationContext.Current;
sync.Post(x => {
TextBlock1.Text = "Foo";
}, null);
这段代码是安全的,但是它遗漏了很多(异常处理等)。这里还有一个类似的问题,当我知道一些线程时,我遇到了这个问题:
带有延续场景的简单异步操作在WPF应用程序上不起作用
如果第二种方法使用方法1的输出,则有竞争条件的危险。
异常可能是由于访问工作线程中的UI控件引起的。