"The calling thread cannot access this object because a different thread owns it"和线程池



我使用ThreadPool是为了在同一时间多次运行同一方法。我在MainWindow.xaml中有一个名为OUTPUT_Box的TextBox,还有一个称为HTTP_Web的类。当我尝试从HTTP_Web.cs编辑OUTPUT_BOX.Text时,我得到了上面的异常。到目前为止,解决方案很简单:

this.Dispatcher.Invoke((Action)(() =>
{
    OUTPUT_BOX.Text += "ALL OK";
}));

但当我使用它时,什么都不会发生。整个代码:

public void ThreadsPool(string arg)
{
    ThreadPool.QueueUserWorkItem(new WaitCallback(ACTION), someargument);
}
private void ACTION(object arg)
{
//.. Some code
    this.Dispatcher.Invoke((Action)(() =>
{
    OUTPUT_BOX.Text += "ALL OK";
}));
}

谢谢!

我认为你试图做一些故意难以做的事情(请注意,调度器对智能化是隐藏的)

WPF是为处理数据绑定而编写的,因此您永远不必担心对UI线程的访问。

为此,MVVM模式应运而生,它将应用程序拆分为不同的组件。一旦你了解了这个模式,WPF就更有意义了,工作起来也更容易了,你再也不用担心UI线程访问了!

相关内容

最新更新