2

任意の .NET 2.0 Winforms アプリケーションで、コードをデバッグ モードで実行し、ブレークポイントに到達するか、コードに 1 行ずつステップ インし、デバッグ中のアプリケーションの GUI を表示したい場合、.NET は実行します。アプリケーション画面を描画しません。

たとえば、フォームの TextBox にいくつかのメッセージを書き込むアプリケーションがあります。コードを段階的にデバッグするとき、またはブレークポイントに到達したときに、すべてのメッセージが TextBox に記録されていることを確認したいのですが、Alt-Tab を押して VS2005 ウィンドウから WinForms アプリケーション ウィンドウに切り替えると、すべてが表示されます。ホワイトカラーです。VS2005 のデバッグ モードで F5 キーを押すまで、フォームは再描画されません。

この理由は何ですか?コードにスレッドを導入せずにこれを克服する方法はありますか?

4

3 に答える 3

3

これの理由は何ですか

デバッグ中は、UI スレッドを効果的にブロックしています。実行フローを手動でステップ実行しています。UI スレッドは、実行を停止している間は UI を描画できません。

そして、これを克服する方法はありますか

手動で電話をかけることもできますがApplication.DoEvents()一般的にはお勧めしません。

メソッドの最後に到達するまで待って、UI 自体を正常に再描画させる方がよいでしょう。メソッドが (時間的に) 非常に長い場合は、デバッグしていないときでも、そのメソッドの実行中に UI 自体を更新できないことに注意してください。これにより、デザインが変更される可能性があります (現時点で入手した情報だけではわかりません)。

于 2013-03-06T18:26:22.020 に答える
0

回答やコメントで他の人が言ったように、UI スレッドがブロックされているため、再描画できません。

ただし、GUI を表示することだけが目的で、GUI を操作する必要がなく、Windows 7/8 を実行していて (VS2005 を使用しているため可能性は低いと思われます)、エアロ ピークを無効にしていない場合は、マウス オーバーできます。アプリケーションがタスク バーに表示され、Windows にプレビュー サムネイルが表示されます。サムネールの上にマウスを置くと、ブレークポイントが UI スレッドをブロックしている場合でも、アプリケーションを「覗く」ことができます。

于 2013-03-07T01:04:50.283 に答える
0

これは、UI スレッドを 1 つしか持てず、そのコードを更新するメソッドを入力すると、そのコードが UI スレッドのブロックを開始するためです。メソッドが終了するまで更新されません。

これは、UI の更新を促進するメッセージ ポンプに関する適切な SOです。

デバッグ時にAdd Watch/Quick Watchを使用して任意の値を確認できるはずです。とにかく、これはあなたが本当に探しているもののように聞こえます。

于 2013-03-06T18:26:05.700 に答える