事件是否在另一个线程中运行?(.Net Compact Framework)

Van*_*nel 1 c# events multithreading windows-mobile winforms

我正在使用.Net Compact Framework 2.0 SP2C#开发Windows Mobile 5.0或更高版本.

当我尝试在处理事件的方法上访问控件的宽度时,它会抛出以下异常:

必须使用Control.Invoke与在单独线程上创建的控件进行交互.

此方法是否在另一个线程中运行?

谢谢!

Qui*_*ome 5

是的,没有创建控件的线程无法访问控件.好吧,为了更准确,他们可以,如果你真的想要,但你冒着应用程序因为死锁而"随机"锁定的风险.

要解决此问题,请使用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)