1

これに対する答えが見つかりませんでした:

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

これは私のコードです:

        private void buttonStart_Click(object sender, EventArgs e)
        {
            ClassCopy cb = new ClassCopy();
            cb.startCopy(textBoxSrc.Text, textBoxDest.Text, true);

            th = new Thread(loading);
            th.Start();

        }

        private loading()
        {
            for (int i = 0; i < 100; i++)
            {
                if (progressBar1.InvokeRequired)
                    progressBar1.Invoke(new Action(loading));
                else
                    progressBar1.Value = i;
            }
        }
4

2 に答える 2

1

この単純な変更により、次のことが可能になります。

        private void loading()
        {
            for (int i = 0; i < 100; i++)
            {
                if (progressBar1.InvokeRequired)
                    progressBar1.Invoke(new Action(loading));
                else
                    progressBar1.Value = i;
            }
        }
于 2013-08-26T13:30:30.933 に答える
0

本当にやるだけです

private delegate void EventHandle();

private void loading()
{
    for (int i = 0; i < 100; i++)
    {
        Thread.Sleep(10);
        Invoke(new EventHandle{progressBar1.Value++;})
    }
}

スリープは変更を確認できるようにするためです。それ以外の場合は、ミリ秒で 0 から 100 になります。

于 2013-08-26T13:22:32.350 に答える