0

フォーム デザイナーを使用して作成したタイマーがあります (これにより、メイン フォーム ウィンドウのメンバーになりますよね?)。このクラスの別のメソッドでタイマーを停止します。現在、それを他のメソッドに渡しt、このクラスのプライベートメンバーである に割り当てることで機能しています。これが発生した場合はnullになる可能性があることに気づきましたが、デバッグした場合はそうではなく、気が狂いました。

System.NullReferenceException was unhandled by user code Message=Object reference not set to an instance of an object.

        private void domDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        // do a doc scan here then remove the handler

        var form = Form.ActiveForm as MainWindow;
        form.pagesToVisit = docScan(b.Document, this.domain);

        if (t != null) { t.Start(); }
        // here i need to stop a timer that is a member of the main form


        b.DocumentCompleted -= domDocumentCompleted;
    }
4

1 に答える 1

0

コードがイベント内にあることに注意してください。イベントは、メイン フォームが動作するスレッドとは別のスレッドで呼び出されている可能性があります。これを回避する方法については、「方法: Windows フォーム コントロールに対してスレッド セーフな呼び出しを行う」を 参照してください。

また、イベント内からイベントを削除することはお勧めできません。

于 2012-09-13T22:54:34.613 に答える