1

新しいスレッドで ShowDialog として設定ウィンドウを呼び出す winform アプリケーションがあります。

アプリケーションをデバッグ モードで実行すると、設定フォームの Show() イベントが発生しません。別の Load() イベントを試したところ、うまくいきました。このメソッドでは、リスト (DataGridView) を作成して表示しています。フォームがレンダリングされると、何も表示されません。単なる空白のフォームです。

ただし、同じコードの場合、デバッグ(ctrl + F5)なしで実行すると、Show()メソッドがトリガーされ、リストが表示されます。

コードは巨大なフレームワークの一部であるため、十分に理解できる尺度で提供できるとは思いません。

Win7 64 ビット m/c を使用しています。

また、spy++ をチェックインしても、フォームにコンテンツが表示されませんでした。そのため、コントロールでレンダリングされませんでした。DEBUG 用に分離されたコードもありません。

これが発生する理由と、変更が必要な設定は何ですか?

4

3 に答える 3

2

解決策はとてもシンプルだと思います。WinForms プログラミングには、 UI Threadと呼ばれるものがあります。これは、すべての UI 関連のコードをこのスレッドで実行する必要があることを意味します。非 UI スレッドで UI 関連のコードを実行すると、「クロススレッド操作が無効です」という例外が発生するか、予期しない動作が発生します。

ここでの解決策は、新しいスレッドではなく UI スレッドで設定ウィンドウを作成することだと思います。

于 2013-01-21T06:53:37.117 に答える
0

手始めに、新しいスレッドで ShowDialog() を呼び出すということは、代わりに Show() を本当に呼び出したいということを示唆しています。つまり、デバッグ ビルドとリリース ビルドの実行が異なる場合、通常は何かが同期していないことを意味します。どのように、またはなぜそれが起こるのかわかりませんが、修正は多くの場合、[ソリューションの再構築] をクリックするのと同じくらい簡単です。

于 2013-01-21T13:56:02.617 に答える