none
BackgroundWorker.DoWork() をトレースすると異常終了する。 RRS feed

  • 質問

  • VisualStudio2005のC#にて、BackgoundWorkerを使用するとデバッガでトレースできずに困っています。

     

    <単純な再現方法>

    ①Windowsアプリケーションのプロジェクトを新規作成

    ②BackgroundWorkerを挿入して、適当なコードをDoWork()内に記述する

    ③RunWorkAsync()でBackgroundWorkerを起動するようにします。

    ④DoWork()内にブレークポイントを置いてデバッグモードで実行すると、ブレークポイントに来た時点でしばらくIDEの応答が止まり、応答が帰ってきてからF10などで処理を続けようとすると、

    「System.Threading.ThreadAbortException' の初回例外が System.Windows.Forms.dll で発生しました。」

    「System.Threading.ThreadAbortException' の初回例外が WindowsApplication1.exe で発生しました。」

    の2つのエラーを出力し、プログラムが止まってしまいます。コードは以下のとおりで、きわめて単純です。

    public Form1()
    {
                InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
                backgroundWorker1.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
                int a = 0;
                a++;
    }

    PC4台中3台でこの現象が発生することを確認しました。

    デバッグができなくて困っております。どなたか原因がお分かりになる方いらっしゃいましたらよろしくご教授お願いいたします。

     

    2006年11月13日 13:53

回答

  • 自己レスします。

    フォーラムの他のテーマにて、同様の書き込みを見つけました。

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=415810&SiteID=7

    によると、デバッグウィンドウの「スレッド」ウィンドウを表示させておけばよいとのこと。

    確かに実験してみると、そのとおりでした。

    いろいろ試したところ、どうやらデバッグウィンドウで、「自動変数」「ローカル」をアクティブにしておかなければ良いようです。

    納得したとは言えないのですが、まあとりあえず解決ということで。

    VC#のバグでしょうかね、、、。

    2006年11月13日 14:25