2010-12-28 11 views
2

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  "; 
    } 

任意の助けのおかげで、私はスレッドへの新たなんだ、といくつかの専門知識を使用することができ、そしてそれを信じるかどうか、私は無駄に間違ったつもりだ場所を把握しようと、どこでも検索しました。

答えて

8

あなたはスレッドオブジェクトを作成したが、あなたのコードが表示されているようだとして、あなたは、それを起動しないでください:

bottomLabelsThread.Start(); 

それが自動的に開始されません。

+0

ああ。私はそれが自動的に開始されていないことをよく承知しています。あなたの時間を無駄にして申し訳ありませんが、私はあなたを見てうれしいです。私の疲れた目には助けが必要でした。 ;) – CODe

+0

問題なし、CODe :-) –