为什么在线程访问UI控件时仅在调试中发生异常?

roa*_*oul 6 c# multithreading threadpool

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

根据我的测试代码,当我运行编译的.exe文件时,线程访问进程条没有任何问题.但是当我调试代码时,会出现InvalidOperationException.(无论是汇集的线程还是正常的线程.)

所以我知道线程不允许访问UI控件,但是为什么在运行.exe文件时它没问题.这是一个预期的设计吗?

PS.I知道我们可以使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn -5

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