クリックイベント時にネットワークから情報を取得するボタンがあります。
情報を取得したら、それを解析してリストボックスにアイテムを追加します。すべて問題ありませんが、ボタンをすばやくダブルクリックすると、2人のバックグラウンドワーカーが実行されているようで、すべての作業が終了すると、リスト内のアイテムが複製されます。
ボタンをクリックして情報を取得するプロセスが機能している場合、このスレッドは停止し、最初の作業が完了した後にのみ2番目のスレッドが開始されるようにしたいと思います。
はい、私はAutoResetEventについて知っていますが、それを使用したとき、それは1回だけ、そしてそれ以上は役に立たなかった。私はこの状況を実行することはできません、そしてあなたが私を助けてくれることを願っています!
今でも簡単にしようとしていますが成功しません:(:フラグフィールド(RefreshDialogs)(デフォルトはfalse)を追加しました。ユーザーがボタンをクリックすると、フラグがtrue(作業が行われていることを意味します)の場合、何も行われません。ただし、フラグフィールドがfalseに設定されている場合は、すべて正常であり、新しいプロセスを開始します。Backgroundworkが
完了したら、フィールドフラグをfalseに変更します(ユーザーが新しいプロセスを実行できることを意味します)。
private void Message_Refresh_Click(object sender, EventArgs e)
{
if (!RefreshDialogs)
{
RefreshDialogs = true;
if (threadBackgroundDialogs.WorkerSupportsCancellation)
{
threadBackgroundDialogs.CancelAsync();
}
if (!threadBackgroundDialogs.IsBusy)
{
downloadedDialogs = 0;
threadBackgroundDialogs = new BackgroundWorker();
threadBackgroundDialogs.WorkerSupportsCancellation = true;
threadBackgroundDialogs.DoWork += LoadDialogs;
threadBackgroundDialogs.RunWorkerCompleted += ProcessCompleted;
threadBackgroundDialogs.RunWorkerAsync();
}
}
}
void ProcessCompleted(object sender, RunWorkerCompletedEventArgs e)
{
RefreshDialogs = false;
}