18

たとえば、プログラムを実行しようとするたびに、

「frmphonebook」を実行する必要がある場合

Application.Run(new frmphonebook());

入力しましたが、実行すると別のフォームが実行され、すべてのフォームで発生し、出力が次のように表示されます

The thread 'vshost.RunParkingWindow' (0x63c) has exited with code 0 (0x0).

The thread '<No Name>' (0xb24) has exited with code 0 (0x0).

これを解決するには?

4

5 に答える 5

28

スレッドに名前を付けると、デバッグにも役立ちます...しかし、多くのアプリでは、スレッドは暗黙的に作成され、名前を制御することはできません。したがって、これはエラー メッセージではありません。コード 0 は、すべてが計画どおりに進んだことを意味します。通常、ゼロ以外のコードはエラーを示します。

編集: これらのメッセージの表示を無効にすることもできます。デバッグ時に、出力を右クリックして、何を表示するかを選択します。 ここに画像の説明を入力

于 2013-09-10T08:22:58.573 に答える
15

スレッドがコード 0 で終了した場合、スレッドは正常に実行されています。On Codeproject は初心者向けのスレッディング ガイドです。スレッディングに関する この記事も参考になるかもしれません。この質問も役に立つかもしれませんシステム エラー コードのリスト

于 2013-02-26T22:10:48.787 に答える
13

デバッガーの使用について学習することの 1 つは、システムの "柔らかい白い下腹" (ワニの解剖学への暗示) と呼ばれるものを確認することです。開始および停止される「ヘルパー」スレッドの配置...など

これらのメッセージをすべて見ると、経験の浅いユーザーの気が散る可能性があります。ただし、時間の経過とともに、デバッガーが単に真実で冗長であることを理解するようになります。表示される詳細は、実際にはデバッグ プロセスに関連していない可能性がありますが、それを「認識する」ことはできません。事実に基づいた情報を表示しているだけであり、関連するものとそうでないものを選別する必要があります。

Windows フォーム アプリケーションに関しては、いくつかの "ヘルパー" スレッドがあり、通常は名前がないか、(デバッグ中によく見られるように) "vshost.RunParkingWindow" のような名前が付いていることに気付きました。通常、自分で作成したスレッドに加えて、システムがユーザーに代わってスレッドを作成していることを信頼する必要があります。他の人が示唆しているように、独自のスレッドに意味のある名前を付けて、システムのスレッドと区別できるようにします。

UI 更新コードのどこかにブレークポイントを配置することで、Windows フォーム アプリのマルチスレッド構造をさらに詳しく知ることができます。ブレークポイントがヒットしたら、Debug/Windows/Threads を使用して、プロセス空間で実行されているすべてのスレッドのビューを表示します。 . その数に驚くと思います!アプリでいくつかのフォームを 1 つずつ作成して .Show() してみてください。各 .Show() 操作が新しいウィンドウを作成し、それによって、そのウィンドウをサポートするいくつかのスレッドが作成されることがわかると思います。

次のようなメッセージがデバッグ ウィンドウに表示される場合もあります。多くの場合、ユーザーに代わって妥当なデフォルト アクションを実行するシステム例外ハンドラがあります。デバッガーに途切れることなく表示されるこのメッセージは、何らかのデフォルト ハンドラーがこの例外を処理したことを示しています。

Windows フォーム アプリケーションなどのシステム サポートは、実装をより簡単かつシンプルにするために、やや複雑です。デバッガーを実行すると、これらの詳細の一部が表示されます。時間が経つにつれて、何が「通常」で、何が問題を示しているかがわかります。

于 2014-08-17T13:39:13.950 に答える