2

私はかなり基本的なことを試みています。

Windowsフォームに3つのラベルがあり、データベースからの3つの個別のクエリから入力したいのですが、何かが起こっていることをユーザーに示すために、それぞれのクエリからデータが利用できるので、各ラベルを表示したいと思います。 。

これを行うには、次を使用できます。

Form.ActiveForm.Refresh();

ただし、ユーザーがデスクトップ上の他のウィンドウをクリックすると、そのコマンドは失敗し、「オブジェクトが設定されていません」というエラーが発生します。

フォームウィンドウがアクティブなウィンドウでなくても、フォームのラベルを更新する方法はありますか?

// Breach within next hour
DataTable tbBreach = (get info from database)
tbBreach.DefaultView.Sort = "Assignee ASC";
dgBreach.DataSource = tbBreach;
lbBreach2.Text = tbBreach.Rows.Count.ToString();
Form.ActiveForm.Refresh();  //Would like to update this form field now, and show it on the form

// Breach within next 24 hour
DataTable tbBreach24 = (get info from database)
tbBreach24.DefaultView.Sort = "Assignee ASC";
dgBreach24.DataSource = tbBreach24;
lbBreach24.Text = tbBreach24.Rows.Count.ToString();
Form.ActiveForm.Refresh();

ありがとうございました、

マーク

4

1 に答える 1

4

ラベルは、詳細の終了時に自動的に更新されます。

おそらく、エラボレーションの途中でラベルを更新するように強制的に更新する必要がありますthis.Refresh()。メソッドはフォームクラス内にあると思われるため、これを使用するだけで実行できます。

ただし、長いエラボレーションがあり、UIを更新してリアクティブに保つ必要がある場合(つまり、フリーズしない場合)、推奨されるアプローチは、UIスレッドでのエラボレーションを避け、を使用して別のスレッドで作業を委任することBackGroundWorkerです。

これがBackGroundWorkerの使用例です

于 2013-01-23T10:28:03.153 に答える