UIスレッドにリストビューがあります。時間がかかるため、バックグラウンドワーカーのDoWorkイベントハンドラーを介して実行する操作がいくつかあります。しかし、例外が発生するため、DoWorkハンドラーのリストビューアイテムにアクセスできません。Cross-thread operation not valid: Control 'bufferedListView1' accessed from a thread other than the thread it was created on.
では、DoWorkイベントハンドラーでbufferedlistviewにアクセスするにはどうすればよいですか。これは、DoWorkで処理されるコードです。
foreach (ListViewItem item in bufferedListView1.Items)
{
string lname = bufferedListView1.Items[i].Text;
string lno = bufferedListView1.Items[i].SubItems[1].Text;
string gname = bufferedListView1.Items[i].SubItems[2].Text;
string line = lname + "@" + lno + "@" + gname;
if (gname.Contains(sgroup))
{
var m = Regex.Match(line, @"([\w]+)@([+\d]+)@([\w]+)");
if (m.Success)
{
port.WriteLine("AT+CMGS=\"" + m.Groups[2].Value + "\"");
port.Write(txt_msgbox.Text + char.ConvertFromUtf32(26));
Thread.Sleep(4000);
}
sno++;
}
i++;
}