我正在尝试在我的 WF 应用程序中使用后台线程对数据库进行操作,但是当我尝试从该后台线程中的 Form1 类更新字段时,它不会引发任何编译错误,但它根本不会更新它。
我正在使用带有 lambda 表达式和匿名委托的 Task.Run(),这是我正在使用的代码
public partial class Form1 : Form
{
SqlCeConnection conn = null;
HashSet<string> CheckedEmails = new HashSet<string>();
private HashSet<string> ListOfEmails()
{
CheckedEmails.Clear();
Queue<string> checkBoxes = new Queue<string>();
if (IT_checkbox.Checked)
{
checkBoxes.Enqueue(IT_checkbox.Text);
}
if (checkBoxes.Count() == 0)
{
return CheckedEmails;
}
Task.Run(() =>
{
//Thread.Sleep(10000);
SqlCeCommand cmd = conn.CreateCommand();
while (checkBoxes.Count() != 0)
{
cmd.CommandText = string.Format("Select Email FROM Emails INNER JOIN Groups ON Emails.UniqueID=Groups.ID WHERE Groups.Grupa='{0}' ", checkBoxes.Dequeue());
SqlCeDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
CheckedEmails.Add((string)dr["Email"]);
}
dr.Close();
}
});
return CheckedEmails;
}
}
最后,我的字段 CheckedEmails 没有按应有的方式更新,你能告诉我我做错了什么以及如何解决吗?先感谢您。当然,如果我想在主线程中进行数据库操作,如果我们删除 Task.Run(),这段代码可以正常工作,但这不是我想要的。