WF アプリケーションでバックグラウンド スレッドを使用してデータベースを操作しようとしていますが、このバックグラウンド スレッド内で Form1 クラスからフィールドを更新しようとすると、コンパイル エラーは発生しませんが、単に更新されません。
ラムダ式と匿名デリゲートで 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 が更新されていません。何が間違っているのか、どうすれば修正できるのか教えていただけますか? 前もって感謝します。もちろん、メイン スレッドで DB 操作を行いたい場合、Task.Run() を削除するとこのコードは正常に機能しますが、これは私が望むものではありません。