Van*_*nel 1 c# events multithreading windows-mobile winforms
我正在使用.Net Compact Framework 2.0 SP2和C#开发Windows Mobile 5.0或更高版本.
当我尝试在处理事件的方法上访问控件的宽度时,它会抛出以下异常:
必须使用Control.Invoke与在单独线程上创建的控件进行交互.
此方法是否在另一个线程中运行?
谢谢!
是的,没有创建控件的线程无法访问控件.好吧,为了更准确,他们可以,如果你真的想要,但你冒着应用程序因为死锁而"随机"锁定的风险.
要解决此问题,请使用Invoke()或BeginInvoke()方法为"UI线程"设置回调.
例如
private void HandleSomeEvent(object sender, EventArgs e)
{
if(textBox1.InvokeRequired)
{
textBox1.BeginInvoke(new EventHandler(HandleSomeEvent), new object[]{sender, e});
}
else
{
textBox1.Text = "WIN!";
}
}
Run Code Online (Sandbox Code Playgroud)