ラベルを更新するために、別のクラスでスレッド書き込みを使用しています。ラベルは Winform Main クラスの内容です。
Scanner scanner = new Scanner(ref lblCont);
scanner.ListaFile = this.listFiles;
Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
trd.IsBackground = true;
trd.Start();
while (!trd.IsAlive) ;
trd.Join();
ご覧のとおり、ラベルの参照を 2 番目のクラスのコンストラクターに渡します。2 番目のクラス (スキャナー) には、次のコードでラベルを更新する「automaticScanner」というメソッドがあります。
public Scanner(ref ToolStripStatusLabel _lblContatore)
{
lblCounter= _lblContatore;
}
Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
threadUpdateCounter.IsBackground = true;
threadUpdateCounter.Start();
while (!threadUpdateCounter .IsAlive) ;
threadUpdateCounter.Join();
private void AggiornaContatore()
{
this.lblCounter.Text = this.index.ToString();
}
ラベルの更新時に次のエラーが表示されました。
クロススレッド操作が無効です: コントロール 'Main' は、それが作成されたスレッド以外のスレッドからアクセスされました
Winform C# で .net 4 を使用しています。
回答ありがとうございます。
ニュース: 問題は次の行です。
trd.Join();
この行は GUI をブロックし、ラベルは更新されませんでした。スレッドの終了を制御し、最後までラベルを更新する方法はありますか? ありがとう