Windows窗体辅助线程不从窗体类更新字段

时间:2013-11-11 16:37:57

标签: .net multithreading winforms asynchronous database-connection

我试图在我的WF应用程序中使用Background线程来对数据库进行操作, 但是当我尝试在这个后台线程中更新我的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(),这段代码工作正常,但这不是我想要的。

0 个答案:

没有答案