我正在使用 .Net Compact Framework 2.0 SP2 和 C#开发 Windows Mobile 5.0或更高版本。
当我尝试在处理事件的方法上访问控件的宽度时,它会抛出以下异常:
必须使用Control.Invoke与在单独线程上创建的控件进行交互。
此方法是否在另一个线程中运行?
谢谢!
答案 0 :(得分:5)
是的,没有创建控件的线程无法访问控件。好吧,为了更准确,如果你真的想要它们,你可能会因为死锁而“随机”锁定应用程序。
要解决此问题,请使用Invoke()或BeginInvoke()方法为“UI线程”设置回调。
e.g。
private void HandleSomeEvent(object sender, EventArgs e)
{
if(textBox1.InvokeRequired)
{
textBox1.BeginInvoke(new EventHandler(HandleSomeEvent), new object[]{sender, e});
}
else
{
textBox1.Text = "WIN!";
}
}
答案 1 :(得分:4)
事件在触发它的线程上运行。因此,如果事件是在与创建控件的线程不同的线程上触发的,那么它会在不同的线程中运行,是的。