3

私のアプリケーション UI では、1 秒ごとに Windows タイマー ティックを使用してグリッドの 1 つを更新しています。

別のウィンドウ フォームに属している他の UI 操作を行っているときに正しく動作しません (これは基本的にタブ付きフォームを使用しています)。

Timer_Tick イベントのトレースを追加し、ファイルにログインしました。

別の UI 操作 (別のウィンドウ フォームの開閉) が行われているときに、ログ データが欠落していることがわかりました。この時点で Timer_Tick がヒットしていません。

ログ データ トレース 助言がありますか...? ここに画像の説明を入力

4

3 に答える 3

5

問題は、UI が単一のスレッドで実行されていることです。そのスレッドで実行時間の長いブロック操作 (フォームを開く、ボタンのクリックに応答してコードを実行するなど) があると、タイマーが起動しなくなります。これは、シングルスレッド プログラミングの性質です。

UI スレッドで何が起こっているかに関係なく、絶対に毎秒コードを実行する必要がある場合は、2 番目のスレッドを使用する必要があります。

関連リンク:

そして、上記のいずれかから UI を操作するために非常に重要です。

于 2013-10-29T05:29:58.147 に答える
-1

ユーザーの操作なしで 2 秒ごとに発生するため、BackgroundWorker で実行できます。BackgroundWorker の詳細については、この記事「http://www.dotnetperls.com/backgroundworker」を参照してください。非常に理解しやすいです。

BackgroundWorkerを使用すると、スレッドを Windows フォームに簡単に実装できます。UI がフリーズしないように、負荷の高いタスクは別のスレッドで実行する必要があります。タスクが完了したら、メッセージを投稿してユーザー インターフェイスを更新する必要があります。

于 2013-10-29T05:40:58.747 に答える