调试WinForms应用程序时收到CrossThreadMessagingException

我正在使用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(); }); 

通常,当我们看到这个(定期)时的问题就像是工作线程或更新UI的计时器 – 但是应该通过UI线程引发按钮点击,所以我不认为这是“常见问题”。

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

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

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

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

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

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