http://www.codeproject.com/KB/threads/winformsthreading.aspx
Я пытаюсь использовать вышеизложенное, и, хотя оно работает в некотором смысле (оно не блокирует мое приложение), к сожалению, оно не обновляет метки в пользовательском интерфейсе. Я что-то не так делаю? У меня есть две метки, которые находятся на 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 ";
}
Спасибо за любую помощь, я новичок в потоках и могу использовать некоторые знания, и, верьте или нет, я искал везде, пытаясь выяснить, где я иду не так, как надо.