1
public partial class JobDataDuplicatorForm : Form
{
public JobDataDuplicatorForm(IJobDataDuplicatorEngine engine)
{
_engine.CopyStartedEvent += GetEventHandler(OnCopyStarted);
_engine.CopyEndedEvent += GetEventHandler(OnCopyEnded);
...
}
private static EventHandler GetEventHandler(Action action)
{
return (sender, args) => action();
}
private void OnCopyStarted()
{
copyStatus.Text = "Copy progress: ";
generateButton.Enabled = false; // Cross-thread operation not valid
}
}
は、私は次の例外がありますスレッドセーフなGetEventHandler()を作成するには?
Additional information: Cross-thread operation not valid: Control
'generateButton' accessed from a thread other than the thread it was created on.
私はGetEventHandler()
を変更する代わりに、この
Invoke((MethodInvoker)delegate { generateButton.Enabled = false; });
のようなさまざまな場所で各ボタンをラップすることにより、例外を修正することはできますか?
どうすればいいですか?
最初にバックグラウンドスレッドから 'JobDataDuplicatorForm(IJobDataDuplicatorEngine engine)'を呼び出していますか? –
更新されました。私は常に古いバリアントを実行しているようです。しかし、どのように? – Anatoly
ボタンを有効にしたり無効にしたりするだけですか? – Sorceri