【发布时间】:2009-06-19 08:41:49
【问题描述】:
我在从使用
创建的线程更新我的 ui 上的控件时遇到问题ThreadPool.QueueUserWorkItem
在这个线程中我正在调用
addControlToPanel(li);
如图所示
private delegate void addControlToPanelDelegate(ListItem li);
private void addControlToPanel(ListItem li)
{
if (panel1.InvokeRequired)
{
addControlToPanelDelegate d = new addControlToPanelDelegate(addControlToPanel);
panel1.Invoke(d, new object[] { li });
}
else
{
panel1.Controls.Add(li);
}
}
第一次进入 addControlToPanel() panel1.InvokeRequired == true 所以一个委托被实例化然后被调用,现在这个进入 addControlToPanel(), panel1.InvokeRequired == false 所以我将控件添加到面板。
我的问题是,即使在针对控件和 panel1.InvokeRequired 为 false 调用之后,我也会在
上收到错误panel1.Controls.Add(li);
说明通常的行
Control.Invoke 必须用于与在单独线程上创建的控件进行交互。
有人能发现问题吗?使用调用来访问另一个线程上的控件是我以前做过很多次的事情,但这一次让我难过!
TIA
单次
【问题讨论】:
标签: c# .net multithreading windows-mobile-6