我有这样的程序
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)
{
}
<{1}}的{{1}}的输出用于Start_method
我不确切地知道我哪里出错了,我是WPF和C#的新手。
答案 0 :(得分:1)
正如@Tudor建议的那样,在Start_method_2
内你正在修改我认为的GUI。
如果要在主线程上工作的UI上修改某些内容,请使用System.Threading.SynchronizationContext.Current
。这是一个例子:
var sync = System.Threading.SynchronizationContext.Current;
sync.Post(x => {
TextBlock1.Text = "Foo";
}, null);
这段代码是安全的,但是它遗漏了很多(异常处理等)。这也是我遇到类似问题的另一个问题,当我知道线程稍微有些问题时:
Simple Async operation with Continuation scenario doesn't work on a WPF app
答案 1 :(得分:0)
如果在第二种情况下使用方法1的输出,则存在竞争条件的危险。
异常可能是由访问worker中的UI控件引起的。向我们展示方法,以便我们提供更详细的解决方案。