毎回1つの条件を確認するタイマーがあり、条件が確認された場合にポップアップフォームを1回だけ表示します。すべてのインスタンスを並行して検証したいので、parallel.for を使用しましたが、「クロススレッド操作が無効です: コントロール 'CameraViewVS' は、それが作成されたスレッド以外のスレッドからアクセスされました。」というエラーが表示されます。行内 " frm.WindowState = FormWindowState.Normal;"
これは私のコードです:
public void timer1_Tick(object source, EventArgs e)
{
Parallel.For(0, nbre, l =>
{
cameraInstanceList[l].Start();
if (cameraInstanceList[l].MoveDetection == true)
{
//show the the form S once
foreach (Form S in Application.OpenForms)
{
var frm = S as Formes.CameraViewVS;
if (frm != null && frm.IP == cameraInstanceList[l].adresse)
{
cameraInstanceList[l].MoveDetection = false;
frm.WindowState = FormWindowState.Normal;
frm.Activate();
return;
}
}
f1 = new Formes.CameraViewVS(cameraInstanceList[l],
adresseIPArray[l]);
f1.Show(this);
}
}
);