2016-08-30 2 views
0

バックグラウンドワーカーから呼び出されたメソッドループ内から文字列をパブリック値に設定する方法を解明しようとしています。WebBrowserコントロールに渡されるBackgroundworkerメソッドから文字列を取得

私は基本的に、さまざまな文字列値を設定し、その後それらを解析するforeachループを持っています。私は文字列に設定された値を評価する特定のif文を持っています。その文字列= "停止"の場合は、結果の文字列の値を公開値に設定し、WebBrowserコントロールである別のフォームからアクセスできるようにします。

文字列を公開値に設定する方法がわかりません。ここで私が今持っているものです。

メインフォーム:私はメソッドの内部メソッドを呼び出すと、DoWorkで次に

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

がある文は、文字列を評価し、ウェブブラウザを持つフォームを呼び出す場合組み込み制御。その形で私は持っています:

private update updateform = null; 

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

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


    } 

これはできますか?

+0

問題が正確にわかりません...文字列がブラウザのフォームから "停止"した場合、mainformのpublicプロパティを設定しますか? – Niklas

+0

mainformのプロパティにアクセスする方法がわからないのですが、何かエラーや問題が発生していますか? – Niklas

+0

worker.completedを使用しない場合は、UIへの変更を呼び出す必要があります - backgroundworkerはUIとは異なるスレッドで動作します。 Invokeのようなもの(新しいMethodInvoker(updatePageItem)); –

答えて

0

GUIで変更するには、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

DoWorkメソッドで "Stop"がヒットしたときに、ループの繰り返しだけでメソッド全体が停止することはないため、RunWorkerCompletedが起動しません。 – Reg

関連する問題