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 回答