私はBackgroundWorkerのを使用して、約2つの質問があります。C#でBackgroundWorkerを使用していますか?
1)を使用すると、機能Aと機能Bの機能Aは、BackgroundWorkerのは、現在別のスレッドで関数Bを実行しているので機能Bを実行しますBackgroundWorkerのを作成し、考えてみましょう。関数Bは長時間実行する予定の無限ループです。関数AがBackgroundWorker throughを使用すると、関数Aが戻ります。では、BackgroundWorker(関数A)を開始した関数が返ったので、BackgroundWorkerスレッドはバックグラウンドで実行し続けますか?または、それをインスタンス化した関数が返されたので、関数Bの実行を停止しますか?それが止まったら、関数Aが返っても関数Bが実行し続けるようにするにはどうすればいいですか?
2)BackgroundWorkerによって作成された別のスレッドからWindow Forms Items(つまりTextbox)にアクセスする必要があります。しかし、メインではないスレッドからWindow Forms Itemsにアクセスしようとすると、クロススレッドエラーが発生します。別のスレッドからWindow Forms Itemsに安全にアクセスするにはどうすればよいですか?私は基本的に別のスレッドからテキストボックスを更新し続ける必要があります。私はBackgroundWorkerが "RunWorkerCompleted"と呼ばれるメンバを持っていて、BackgroundWorkerがそのジョブを完了した後に実行されることを知っています。これにより私はWindow Forms Itemsにアクセスできます。しかし、完了後ではなく、スレッドの期間中にWindow Forms Itemにアクセスする必要があります。どのようにしてこれらのスレッドに安全にアクセスできますか?これが不可能な場合は、問題の解決策は他にありますか?
ありがとうございます。私はProgressChangedを使用しましたが、それでも私はクロススレッドエラーが発生します。どんな考え? – fdh
あなた(@Farhad)が私から与えられたコードスニペットを試しましたか? –
@Amir Palsapureご協力いただきありがとうございます。あなたの答えは私のために少し複雑です(あなたのせいではありません)。そして、これはちょっと簡単ですので、これを試してみることにしました。私はちょうどC#を始めたので、この答えはちょっと分かりやすいようです。あなたの助けをもう一度ありがとう。 – fdh