C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Re: BackgroundWorkerでビジー


(過去ログ 59 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■33975 / inTopicNo.1)  BackGroundWorkerでビジー
  
□投稿者/ hirosi (3回)-(2009/03/15(Sun) 12:57:32)

分類:[C#] 

お世話になります。

WindowsVista HomeEdition / C#2008 ExpressEdition

BackGroundWorkerを使用して、バックグラウンドで処理をしています。
その処理は頻繁に呼ばれ、まだ実行中の時は終了させて、再度処理を実行したいと考えています。

ところが、スレッドを終了させてから再実行しているのにもかかわらず

----------------------------------------------------------------------------------------------
System.InvalidOperationException が発生しました。
Message="BackgroundWorker は現在ビジー状態であるため、複数のタスクを同時に実行できません。"
----------------------------------------------------------------------------------------------

となっています。

上記のエラーを回避する方法をご存知の方は教えていただけないでしょうか。

実際のソースコードは以下の通りです。

public void 別スレッドの処理() {
if(_BackGroundWorker.IsBusy)
{
_BackGroundWorker.CancelAsync();
}
_BackGroundWorker.RunWorkerAsync(パラメータ);
}
private void _BackGroundWorker_DoWork(object sender, DoWorkEventArgs e) {
for(・・・・・・・・)
{
if(_BackGroundWorker.CancellationPending)
{
e.Cancel = true;
return;
}
}
}

引用返信 編集キー/
■33976 / inTopicNo.2)  Re: BackgroundWorkerでビジー
□投稿者/ 魔界の仮面弁士 (1016回)-(2009/03/15(Sun) 13:34:31)
2009/03/15(Sun) 16:59:24 編集(投稿者)
No33975 (hirosi さん) に返信
> BackGroundWorkerを使用して、バックグラウンドで処理をしています。

BackGroundWorker ではなく、
BackgroundWorker ですよね。


>     if(_BackGroundWorker.IsBusy)
>     {
>         _BackGroundWorker.CancelAsync();
>     }
>     _BackGroundWorker.RunWorkerAsync(パラメータ);

Cancel『Async』というだけあって、このキャンセル処理は非同期的に行われます。
CancelAsync したからといって、その直後にビジー状態を脱するわけではありません。

直ちに続行させたいのなら、別の BackgroundWorker に処理を依頼してください。
単一の BackgroundWorker で行いたいなら、次の作業は
RunWorkerCompleted が発生してから依頼するようにします。

引用返信 編集キー/
■34008 / inTopicNo.3)  Re[2]: Re: BackgroundWorkerでビジー
□投稿者/ hirosi (4回)-(2009/03/17(Tue) 01:58:24)
いつも回答していただきありがとうございますm(__)m

No33976 (魔界の仮面弁士 さん) に返信
> 2009/03/15(Sun) 16:59:24 編集(投稿者)
>
> ■No33975 (hirosi さん) に返信
>>BackGroundWorkerを使用して、バックグラウンドで処理をしています。
>
> BackGroundWorker ではなく、
> BackgroundWorker ですよね。
(゜O゜;アッ!
小文字だったんですね・・・(;^_^A アセアセ・・・


> Cancel『Async』というだけあって、このキャンセル処理は非同期的に行われます。
> CancelAsync したからといって、その直後にビジー状態を脱するわけではありません。
>
> 直ちに続行させたいのなら、別の BackgroundWorker に処理を依頼してください。
> 単一の BackgroundWorker で行いたいなら、次の作業は
> RunWorkerCompleted が発生してから依頼するようにします。

新規に BackgroundWorker を生成して実行することで無事に解決できました。
てっきり、処理が終了するまで待ってもらえる何かがあるのかと思っておりまして。。

ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -