-1

TextReader呼び出されたときにいくつかの値をロードする子フォームがあります。フォームを召喚した瞬間にクラッシュし続けます。このフォームにはTimer、テキストを次のTextBoxように更新する があります。

textbox.Text = this.ActiveControl.Name;

ロード操作中にタイマーを無効にすると、クラッシュが発生しなくなります。TextReaderによって干渉されthis.ActiveControl、クラッシュを引き起こすと言うのは正しいですか?

VS Just-in-Timer デバッガーは、毎回異なる [xxxx] エラー コードを出します。VS でデバッグしようとすると、「クラッシュしているプロセスをアタッチできません。デバッガーは既にアタッチされています。」というメッセージが表示されます。

4

2 に答える 2

1

競合状態が発生している可能性があります。ActiveControlタイマーが呼び出された (およびタイマーにアクセスしようとした) ときにまだ初期化されていない場合、クラッシュが発生します。あなたが述べたように、完全に初期化されるまでタイマーが無効にアクセスしないようにする必要がありますActiveControl(それまで無効にするか、他の手段(ミューテックス/セマフォなど)でアクセスを保護します)

于 2012-06-18T17:18:50.983 に答える
0

皆様、ご協力ありがとうございました。Hans Passant の返事を見落としていました。ここで、TextBox テキストの更新を if 内にネストすると、次のようになります。

if (this.ActiveControl != null) { tbTest.Text = this.ActiveControl.Name; }

タイマーを無効にしなくても、クラッシュは発生しません。Kaboom、ハンスは間違いを犯しました! ^^

競合状態へのポインタをくれた Attila に感謝します。知識ツールボックスで非常に役立ちます。

于 2012-06-18T17:36:34.743 に答える