2016-08-30 3 views
0

Я пытаюсь выяснить, как установить строку для общедоступного значения из цикла метода, который вызывается фоновым рабочим.Получить String из метода Backgroundworker, переданного в элемент управления webbrowser

В основном у меня есть цикл foreach, который устанавливает различные значения строк, а затем анализирует их. У меня есть конкретный оператор if, который оценивает значение, заданное для строки. Если эта строка = «остановить», я хочу установить значение строки результата в общедоступное значение, к которому затем можно получить доступ другой формой, которая является элементом управления веб-браузером.

Я не могу понять, как установить строку для общедоступного значения. Вот то, что я прямо сейчас:

Основная форма:

public string result 
    { 
     get { return result; } 
     set { result = value; } 
    } 

Тогда в DoWork я вызываю метод и внутри метода есть, если заявление оценивает строки и вызывает форму, которая имеет WebBrowser управление встроено. В этой форме у меня есть:

private update updateform = null; 

    public browser(Form callingForm) : this() 
    { 
     updateform = callingForm as update; 
    } 

public browser() 
    { 
     InitializeComponent(); 
     webBrowser1.DocumentText = updateform.result; 


    } 

Это можно сделать?

+0

Не знаете, в чем проблема именно ... U хотите установить общедоступное свойство mainform, если строка равна «stop» из формы браузера? – Niklas

+0

Вы получаете какие-либо ошибки или проблемы, не знаете, как получить доступ к свойству mainform? – Niklas

+0

Если вы не хотите использовать employee.completed, вам нужно вызывать свои изменения в пользовательском интерфейсе - backgroundworker работает в другом потоке, чем ваш пользовательский интерфейс. Что-то вроде Invoke (новый MethodInvoker (updatePageItem)); –

ответ

0

Чтобы внести изменения в графический интерфейс, вы должны использовать событие RunWorkerCompleted.

Например:

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // do calculation ... 
    e.Result = resultString;  
} 

private void backgroundWorker_RunWorkerCompleted(object sender, DoWorkEventArgs e) 
{ 
    // check cancellation ... 
    webBrowser1.DocumentText = e.Result; 
} 

Смотрите также MSDN.

+0

Задача RunWorkerCompleted не запускается, потому что, когда «Стоп» попадает в метод DoWork, он не останавливает весь метод, просто итерацию цикла. – Reg

Смежные вопросы