我正在使用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();
});
答案 0 :(得分:3)
通常情况下,我们看到这个(定期)的问题就像工作线程或更新UI的计时器一样 - 但是应该通过UI线程提出按钮点击,所以我不认为这是“通常的”问题。”
那么:camera
是什么?什么是Recording
?两者都没有解释,如果不引入额外的变量我们就无法猜测......
根据它们的不同,也许这会起作用......
camera.Invoke((MethodInvoker) delegate
{
if (camera.Equals("enable", StringComparison.InvariantCultureIgnoreCase))
{
Recording.Stop();
}
});
但不知道canera
是什么,我抓着稻草......
答案 1 :(得分:1)
也许相机对象是由另一个线程创建和管理的..你能否公开更多关于相机对象的代码?
答案 2 :(得分:1)
我知道WMEncoder
是COM
个对象。您可以尝试在GUI线程中创建CameraEncoder
而不是其他线程。