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

时间:2009-12-01 10:57:51

标签: c# winforms events windows-mobile multithreading

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

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

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

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

谢谢!

2 个答案:

答案 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)

事件在触发它的线程上运行。因此,如果事件是在与创建控件的线程不同的线程上触发的,那么它会在不同的线程中运行,是的。