0

ボタンをクリックするとフォームが更新されるようにしようとしています。ただし、エラーが発生し続けます

「クロススレッド操作が無効です: コントロール 'Form1' は、それが作成されたスレッド以外のスレッドからアクセスされました。」

 private void button1_Click(object sender, EventArgs e)
    {
        worker.DoWork += formReload;
        worker.RunWorkerAsync();
    }

    static BackgroundWorker worker = new BackgroundWorker();

    private void formReload(object sender, DoWorkEventArgs ev)
    {
        this.Refresh();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {

    }

私はそれを調査しようとしましたが、Invoke メソッドを使用する必要があることがわかりましたが、どこに置くべきか、なぜそれを使用するのかわかりません。どんな助けでも大歓迎です!

ありがとう、ジャロッド

4

1 に答える 1

4

実際、あなたのコードは何もしませんDoWork。不要です。コードを次のように書き換えることができます。

private void button1_Click(object sender, EventArgs e)
{
    worker.RunWorkerAsync();
}

static BackgroundWorker worker = new BackgroundWorker();

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    if (this.InvokeRequired)
        this.Invoke(new Action(()=>Refresh()));
}

DoWorkを使用してコンストラクターでメソッドをサブスクライブしたと仮定します

worker.DoWork += backgroundWorker1_DoWork;

Refreshaは何も変更しないことに注意してください。何をリフレッシュすればいいですか?

于 2013-07-09T13:27:06.717 に答える