Исправление перекрестного исключения - PullRequest
2 голосов
/ 27 октября 2011

Мне нужна помощь в устранении исключения между потоками. Я использую Invoke, который обычно решает эту проблему, но по какой-то причине он не работает:

void paintTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    Invoke(new InvalidateFromSepThreadDel(InvalidateFromSepThread));
}
delegate void InvalidateFromSepThreadDel();
void InvalidateFromSepThread()
{
    TailGraph.Invalidate();
}

Исключение выдается при вызове:

$ exception {"Операция с несколькими потоками недопустима: элемент управления 'XTailGraph' доступ из потока, отличного от потока, в котором он был создан on. "} System.Exception {System.InvalidOperationException}

1 Ответ

1 голос
/ 27 октября 2011

Invoke вернет поток , для которого был создан элемент управления (используется метод Invoke).Убедитесь, что другой элемент управления также был создан в указанном потоке, то есть убедитесь, что один элемент управления не был создан в "неправильном потоке", чтобы начать с .

Кроме того, поскольку target для Invoke не было указано, то это будет this.Invoke содержащего объекта / класса - что может быть неуместно.

(или какХасан Хан указал, рассмотрите таймер WinForms ... обратный вызов всегда будет выполняться в потоке, в котором был создан таймер, в этом случае.)

Счастливое кодирование.

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