【发布时间】:2014-10-22 13:13:49
【问题描述】:
我正在使用 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";
}));
}
谢谢!
【问题讨论】:
-
哪一行出现异常?我猜您的
//.. Some code访问 UI,当从线程池线程调用此方法时,这是不允许的。同样从 .Net 4.0 开始,无需使用QueueUserWorkItem,使用 TPL。假设您使用的是 .Net 4.0 或更高版本。 -
我没有收到任何异常,没有任何反应,TextBox 没有更新。我也在为 3.5 开发。
-
如果你放断点可能会发生一些事情然后你可以问这个问题吗?
-
在你的问题中你说我得到了上述异常,现在你说我没有得到任何异常。哪个是真的?如果没有异常,那么此消息来自哪里调用线程无法访问此对象,因为不同的线程拥有它”和线程池?
-
我试过了,还是不行。
标签: c# .net wpf multithreading exception