Когда что-то происходит в BackgroundWorker, запускает код в другом потоке? - PullRequest
1 голос
/ 18 июня 2010

У меня есть фоновый работник, который запускает и ищет вещи, и когда он находит вещи, я хочу обновить мой основной WinForm. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я пытаюсь обновить свой WinForm от моего фонового работника, я получаю ошибки, которые говорят мне, что я не могу изменить вещи, которые были сделаны вне моего фонового работника (другими словами, все в моей форме ).

Может ли кто-нибудь предоставить простой пример кода, как я могу заставить свой код работать так, как я хочу? Спасибо!

Ответы [ 2 ]

5 голосов
/ 18 июня 2010

Полагаю, вы ищете событие OnProgressChanged. Больше информации с примером здесь: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.onprogresschanged.aspx

4 голосов
/ 18 июня 2010

Если я правильно понимаю, вы хотите внести изменения в саму форму, однако вы не можете изменить элемент управления в форме из потока, отличного от потока, в котором была создана форма. Чтобы обойти это, я использую метод Form.Invoke () следующим образом:

public void DoSomething(string myArg) 
{
    if(InvokeRequired) 
    {
        Invoke(new Action<string>(DoSomething), myArg);
    }
    else
    {
        // Do something here
    }
}

Свойство InvokeRequired проверяет вызывающий поток, чтобы определить, является ли он правильным потоком для внесения изменений в форму, если метод Invoke не перемещает вызов в поток окна формы.

...