0

C# Winform Visual Studio アプリケーションは、数時間使用すると「応答なし」でハングし、アプリケーションを閉じる Windows ポップアップが表示されます。これは、コンピューターへのリモート デスクトップを開始するとき、または最小化後にアプリケーション ウィンドウにフォーカスを移動するときによく発生します。

アプリケーションは、フォーカスを合わせるときに CPU をフルに消費し、このプロセスで次第に遅くなります。

Windows フォームは、RS232 経由でデバイスを制御するためのマルチスレッド GUI です。デバッグ出力用のテキストボックスを 1 秒間に数回使用します。テキストボックスへの書き込みは、非同期メソッドで行われます。

void asyncAppendTextBox(TextBox tb, string str) { if (IsHandleCreated) { tb.BeginInvoke( new Action(() => { tb.AppendText(str + appLifetimeSW.ElapsedMilliseconds.ToString()); } )); } }

4

1 に答える 1

0

この問題に対する答えは、最終的には非常に簡単でした。Textbox は単純にテキストでいっぱいになりすぎて、最終的にフォーカスを戻すときにすべてを再描画するのに数分かかりました。テキストボックスは AppendText() 関数で問題なく描画されていたため、これは最初はわかりませんでした。プログラムを数時間実行した後、テキストの量が効果的に表示され、アプリケーションがハングアップしました (Windows によると)。

簡単な修正は、代わりに文字列配列に書き込み、非同期呼び出しメソッドで 'Textbox.SetText(string[])' を介してテキスト ボックスにテキストを設定することでした。さらに、配列を 1 つシフトし、AppendText() の外観と一致するように配列の最後の要素に書き込みます。

ハングすることはなくなり、アプリケーションは応答します。

于 2018-06-07T10:24:14.460 に答える