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#的新手。

WPF中的线程

正如@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控件引起的。