调试WinForms应用程序时收到CrossThreadMessagingException

时间:2009-06-18 11:32:07

标签: c# winforms debugging

我正在使用Wndows XP SP3 x86 + VSTS 2008使用C#编写一个简单的Windows窗体应用程序。有一个名为button1的按钮,这里是click事件的事件处理程序,在执行if语句时,有Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException。有没有人有什么好主意呢?

private void button1_Click(object sender, EventArgs e)
{
    string recording = ConfigurationSettings.AppSettings["recording"];

    // exception thrown when executing the following if statement
    if (recording.Equals("enable", StringComparison.InvariantCultureIgnoreCase))
    {
        CameraEncoder.Stop();
    }
}

更多代码:

static WMEncoder CameraEncoder = new WMEncoder();

EDIT1:

我很困惑如何应用Marc在我的代码中使用Invoke的想法。我应该使用以下代码段吗?

CameraEncoder.Invoke((MethodInvoker) delegate
{
        CameraEncoder.Stop();
});

3 个答案:

答案 0 :(得分:3)

通常情况下,我们看到这个(定期)的问题就像工作线程或更新UI的计时器一样 - 但是应该通过UI线程提出按钮点击,所以我不认为这是“通常的”问题。”

那么:camera是什么?什么是Recording?两者都没有解释,如果不引入额外的变量我们就无法猜测......

根据它们的不同,也许这会起作用......

camera.Invoke((MethodInvoker) delegate
{
    if (camera.Equals("enable", StringComparison.InvariantCultureIgnoreCase))
    {
        Recording.Stop();
    }        
});

但不知道canera 是什么,我抓着稻草......

答案 1 :(得分:1)

也许相机对象是由另一个线程创建和管理的..你能否公开更多关于相机对象的代码?

答案 2 :(得分:1)

我知道WMEncoderCOM个对象。您可以尝试在GUI线程中创建CameraEncoder而不是其他线程。