Получение CrossThreadMessagingException при отладке приложения WinForms - PullRequest
0 голосов
/ 18 июня 2009

Я использую Wndows XP SP3 x86 + VSTS 2008 для написания простого приложения Windows Forms с использованием C #. Есть кнопка с именем 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:

Я не совсем понимаю, как применить идею Марка об использовании Invoke в моем коде. Должен ли я использовать следующий сегмент кода?

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

Ответы [ 3 ]

3 голосов
/ 18 июня 2009

Обычно проблема, когда мы видим это (регулярно), это что-то вроде рабочего потока или таймера, обновляющего пользовательский интерфейс - но нажатие кнопки должно быть выполнено через поток пользовательского интерфейса, поэтому я не думаю, что это "обычный проблема».

Итак: что такое camera? А что такое Recording? Ни то, ни другое не объясняется, и мы не можем догадаться, не введя дополнительные переменные ...

В зависимости от того, что они, может быть, это будет работать ...

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

Но, не зная, что такое canera , я хватаюсь за соломинку ...

1 голос
/ 18 июня 2009

Я знаю, WMEncoder - это COM объект. Вы можете попробовать создать CameraEncoder в потоке GUI вместо другого потока.

1 голос
/ 18 июня 2009

Может быть, объект камеры создан и управляется другим потоком. Не могли бы вы предоставить больше кода относительно объекта камеры?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...