Заявка в постоянном ожидании на Invoke - PullRequest
0 голосов
/ 29 января 2012

У меня проблема с вызовом некоторых графических методов в основном потоке моего приложения.Я использую SlimDX для визуализации в контроле моего окна.Для выполнения графического кода в основном потоке я использую формы Invoke.Обычно это работает без проблем, но иногда (без фиксированного временного интервала) приложение зависает, и отладчик сообщает мне, что приложение находится в состоянии ожидания.

Код следующий:

public void CallOnThread(Action action)
{
    if (mWindow.InvokeRequired)
        action();
    else
        mWindow.Invoke(action);
}

Окно (a System.Windows.Forms.Fom) запускается с использованием SlimDXs MessagePump.Run.

Я видел другие публикации, где было предложено Dispatcher.Run, но на самом деле это просто блокирует весь поток, не выполняющий никакой визуализации.

В чем причина такого поведения?

Спасибо и привет

1 Ответ

0 голосов
/ 29 января 2012

В этом случае ответом является просто перевернутый оператор if.

public void CallOnThread(Action action)
{
    if (!mWindow.InvokeRequired)
        action();
    else
        mWindow.Invoke(action);
}
...