COD*_*ODe 2 c# multithreading winforms
http://www.codeproject.com/KB/threads/winformsthreading.aspx
我试图使用上面的内容,虽然它在某种意义上起作用(它没有锁定我的应用程序),但它不会更新UI上的标签.我在某个地方出错了吗?我在MainForm,expiredPoliciesLabel和missingPoliciesLabel上有两个标签.要更新它们,我必须通过执行一系列数据库查询来设置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 ";
}
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助,我是线程新手,可以使用一些专业知识,不管你信不信,我到处搜索试图找出我出错的地方无济于事.
小智 8
您创建了线程对象,但是没有启动它,因为您的代码似乎显示:
bottomLabelsThread.Start();
Run Code Online (Sandbox Code Playgroud)
它不是自动启动的.