2

私のc#winformアプリには、クリックするといくつかの計算を実行するボタンがあります。

label.visible = falseボタンをクリックしたlabel.visible = true直後に、ユーザーがアプリの動作を確認できるようにすることもできます。

事はlabel.visible = true、メソッドの最初のものであってもbutton1_Click(object sender, EventArgs e)、計算が実行された後、最後に表示に切り替わるだけです。

button_click の直後にラベルを表示するにはどうすればよいですか?

4

4 に答える 4

4

アプリの処理中にアプリケーションの応答性を維持する必要がある場合は、Background Workerをご覧ください。

以下を呼び出して、フォームを強制的に更新してバックグラウンド メッセージを処理することができます。

Application.DoEvents();

ラベルを変更した直後 - これはおそらくちょっとハックな解決策ですが。

于 2013-01-07T14:18:54.117 に答える
2

計算は UI スレッドで実行されています。これは、ラベルの可視性を設定した後、UI の更新がブロックされていることを意味します。タスクを使用して別のスレッドで計算を行うことを検討する必要があります。これにより、バックグラウンドで実行できる長い操作のように見える場合でも、UI が応答できるようになります。

例えば

var taskCalc = Task.Factory.StartNew(() => //Do Calculation );
于 2013-01-07T14:20:12.810 に答える
1

他の人が言ったように: あなたは UI スレッドで作業を行っています。必要なものを達成するための別の有効な方法を示しています。匿名デリゲートを使用して、作業を別のスレッドに移動できます。

(new System.Threading.Thread(() =>
        {
            dowork(); // What ever work you need put here.
        })).Start();
于 2013-01-07T14:54:32.837 に答える
1

これに対処するにはいくつかの方法があります。

1つの方法(最も簡単な方法)は、呼び出すことです

this.Refresh();

ラベルを表示に設定した直後。

もう 1 つは、バックグラウンド スレッドで計算を行うことです。これを行う最も簡単な方法は、BackgroundWorker. その後、バックグラウンド ワーカー スレッドが計算を実行している間、メイン スレッドは UI の提供 (フォームの更新、ボタンへの応答など) を続行できます。

バックグラウンド ワーカー スレッドの詳細については、 http://www.dotnetperls.com/backgroundworkerを参照してください。

于 2013-01-07T14:21:00.133 に答える