http://www.codeproject.com/KB/threads/winformsthreading.aspxC#更新UI
私は上記を使用しようとしています、そして、それはある意味で動作している間(それは私のアプリケーションをロックしません)、それが更新されていません残念なことにUI上のラベル。私はどこかで間違っていますか?私は、メインフォームのexpiredPoliciesLabelとmissingPoliciesLabelの2つのラベルを持っています。それらを更新するには、わかるように、一連のデータベースクエリを実行してexpiredPoliciesNumとmissingPoliciesNumを設定する必要があります。毎分自動的にラベルを更新する必要があります。 (私は今、私はそれが1秒で設定されていることを知っている、それはコードが動作しているかどうかを見ることです)
私のコードです。
public delegate void updatePolicyLabelsDelegate();
public partial class MainForm: Form
{
SQLiteQuery sqliteQuery = new SQLiteQuery(Properties.Settings.Default.DatabasePath);
int expiredPoliciesNum = 0;
int missingPoliciesNum = 0;
Thread minimizeThread;
public MainForm()
{
this.Resize += new EventHandler(MainForm_Resize);
this.IsMdiContainer = true;
InitializeComponent();
this.ShowInTaskbar = false;
keyValidation();
Thread bottomLabelsThread = new Thread(new ThreadStart(updateLabels));
bottomLabelsThread.IsBackground = true;
}
public void updateLabels()
{
while (true)
{
Invoke(new updatePolicyLabelsDelegate(updatePolicyLabels));
Thread.Sleep(1000);
}
}
private void updatePolicyLabels()
{
DataTable dt = sqliteQuery.selectFromDatabase("*", "WHERE GLOPolicy != '1'");
missingPoliciesNum = dt.Rows.Count;
dt = sqliteQuery.selectFromDatabase("*", "WHERE ALPolicy != '1'");
missingPoliciesNum = missingPoliciesNum + dt.Rows.Count;
dt = sqliteQuery.selectFromDatabase("*", "WHERE WCPolicy != '1'");
missingPoliciesNum = missingPoliciesNum + dt.Rows.Count;
dt = sqliteQuery.selectFromDatabase("*", "WHERE ULPolicy != '1'");
missingPoliciesNum = missingPoliciesNum + dt.Rows.Count;
String now = DateTime.Now.Year + "-" + DateTime.Now.Month + "-" + DateTime.Now.Day;
dt = sqliteQuery.selectFromDatabase("*", "WHERE GLOPolicy = '1' AND GLOExpiration < '" + now + "'");
expiredPoliciesNum = dt.Rows.Count;
dt = sqliteQuery.selectFromDatabase("*", "WHERE ALPolicy = '1' AND ALExpiration < '" + now + "'");
expiredPoliciesNum = expiredPoliciesNum + dt.Rows.Count;
dt = sqliteQuery.selectFromDatabase("*", "WHERE WCPolicy = '1' AND WCExpiration < '" + now + "'");
expiredPoliciesNum = expiredPoliciesNum + dt.Rows.Count;
dt = sqliteQuery.selectFromDatabase("*", "WHERE ULPolicy = '1' AND ULExpiration < '" + now + "'");
expiredPoliciesNum = expiredPoliciesNum + dt.Rows.Count;
expiredPoliciesLabel.Text = expiredPoliciesNum + " Expired Policies ";
missingPoliciesLabel.Text = missingPoliciesNum + " Missing Policies ";
}
任意の助けのおかげで、私はスレッドへの新たなんだ、といくつかの専門知識を使用することができ、そしてそれを信じるかどうか、私は無駄に間違ったつもりだ場所を把握しようと、どこでも検索しました。
ああ。私はそれが自動的に開始されていないことをよく承知しています。あなたの時間を無駄にして申し訳ありませんが、私はあなたを見てうれしいです。私の疲れた目には助けが必要でした。 ;) – CODe
問題なし、CODe :-) –