调试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
而不是其他线程。