私はマルチスレッドでは最高ではありませんが、これは少し複雑です。うまくいけばそれをうまく説明できます。C#BackgroundWorker内の非同期作業ですか?
基本的に私はBackgroundWorkerタスクを持っています。その中には、Webサイトから情報を取得するための呼び出しがいくつかあります。これを行うより良い方法があるかもしれませんが、私はそれを考えることができません。私がこれをやっている理由は、すべてののウェブサイトへの呼び出し(およびその後の情報の処理)が完了したときに、1つのイベントを開催したいからです。
private void loadContent() {
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += delegate(object sender, DoWorkEventArgs e) {
getAndProcessInformation(desiredInformationName);
getAndProcessInformation(someOtherDesiredInformationName);
};
worker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e) {
MessageBox.Show("Finished!");
Dispatcher.BeginInvoke(() => { progressBar(false); });
};
worker.RunWorkerAsync();
}
private void getAndProcessInformation(string theInformationIWant){
Fetcher dataFetcher = new Fetcher(); //Fetcher is a custom class that reads information from a web server
dataFetch.receivedData += delegate(DataResponseArgs args) {
//Process some data
};
dataFetch.requestData(theInformationIWant);
}
だから、何が起こることは、データが実際に完了する前はをRunWorkerCompletedメソッドが呼ばれる2つのgetAndProcessInformation直後に呼び出されて、ということです。
この
は、私が起こっているものは基本的です処理。何か方法はありますか?RunWorkerCompletedは、メソッドの処理が実際に終了した時点で実行されますか?ここで、実際には処理が既に別のスレッドで行われているため、BackgroundWorkerは実際には必要ではないことがわかりましたが、1つのスレッドが必要な結果を得ることはできませんすべての処理が完了したときにトリガーされるイベント。だから、これは本当に2つの質問ですね。もし私がBackgroundWorkerを使用し続けるべきかどうか、どうすれば修正するのですか?もしそうでなければ何ができますか?
恐縮です。 –