3

C#フォーム(WinForms)を使用して、表示されないようにした場合:

MyForm.Visible = false;

次に、私が作成した別のスレッドで。次のコードが実行されます。

        this.Invoke(new MethodInvoker(delegate()
                                          {
                                              ProgressBar2.Visible = false;
                                          }));

アプリケーションがフリーズし、続行されなくなります。MyFormが表示されている場合、スレッド内の上記のコードは正常に実行されます。表示されていない場合は、「this.Invoke(new MethodInvoker(delegate()」行を読み取るとすぐにコードの実行が停止します。エラーは発生せず、そのまま表示されます(ブレークポイントを設定して監視します)。 「this.Invoke(newMethodInvoker(delegate()」)の後に座っているだけです。

フォームが非表示になっているときにこれが実行されない理由について何か考えはありますか?そして、どうすればこの問題を回避できますか?MainFormでプログレスバーコントロールを表示できるように設定できる必要があるため(メインUIスレッド以外のスレッドでこれを行う必要があるため)、「this.Invoke(new MethodInvoker(delegate()」」を使用しています。フォームが表示されているかどうかに関係なく、これを実行します。

4

2 に答える 2

2

フォームが非表示になると、メッセージ ポンプが実行されていないと思います。Invoke メカニズムでは、メッセージ ポンプが実行されている必要があることは知っています。

可視性ではなく不透明度を 0 に設定することで問題を回避できる場合がありますが、これには独自の問題があります。

于 2012-09-18T01:00:56.610 に答える
-1

フォームを要素でラップし、style="display:none;" を設定します。visible を false に設定すると、クライアント コードでオブジェクトがレンダリングされなくなります。

于 2012-09-18T01:08:30.867 に答える