フォーム外の別のクラスのメソッドを呼び出すBackgroundWorkerスレッドからラベルを更新しようとしています。だから私は基本的にこれをしたい:WinForms UIを更新するBackgroundWorkerスレッド
MainForm.counterLabel.Text = Counter.ToString();
しかし、ラベルはプライベートです。私はBackgroundWorkerのprogressupdate関数、呼び出しなどを使用するようなことを調べましたが、必要なものではないようです。ここ
は、私のコードのいくつかのより多くのです:
のMainForm:
clickThread.DoWork += (s, o) => { theClicker.Execute(speed); };
clickThread.RunWorkerAsync();
クラス/メソッドと呼ばれる:
public void Execute(int speed)
{
while (running)
{
Thread.Sleep(speed);
Mouse.DoMouseClick();
Counter++;
//Update UI here
}
}
私は過度に少し私のコードを複雑にしていると思います: \そして自分自身をコーナーに戻しました。
ラベルがプライベートであれば、あなたはそれを設定するためのメソッドやプロパティを公開していますか? – Hendry
問題を理解する:オブジェクト "theClicker"は、MainFormのプライベートラベルにアクセスできません。この問題を解決する本当に貧弱な方法は、ラベルを "theClicker"のExecuteメソッドに渡すことです。 – Shamshiel
BWの基本はDoWork内からUIにアクセスするのは簡単ではありません**。 'ProWorkChanged'の' DoWork'とUIのUIのものではないものを行います。 –