6

我只是对线程和 UI 控件感到好奇。

根据我的测试代码,当我运行编译的 .exe 文件时,线程访问进程栏没有任何问题。但是当我调试代码时,会出现 InvalidOperationException。(无论是池化线程还是普通线程。)

所以我知道线程不允许访问UI控件,但是为什么我运行.exe文件就可以了。是预定的设计吗?

PS.我知道我们可以使用 backgroundworker 让事情变得优雅。

private void button1_Click(object sender, EventArgs e)
{
    Task.Factory.StartNew(dothing);//use the pooled thread
    //Thread t = new Thread(new ThreadStart(this.ThreadProcSafe));
    //t.Start();
}

private void dothing()
{
    for (int i = 1; i <= 100; i++)
    {
        progressBar2.Value = i;
        Thread.Sleep(100);
    }
}
4

1 回答 1

-5

在我的记忆中,您不能在其他线程中访问 UI 元素,而只能在主线程中访问。这是因为一些多线程问题(同一内存中的多访问,异步问题......等)。如果你想做你想做的事。您可以在 C# 中使用“委托函数”。

于 2012-12-14T03:15:00.913 回答