首页 > 解决方案 > 调试模式下的 TPL 问题,在发布模式下一切正常

问题描述

为什么我得到一个异常:{ InvalidOperationException:跨线程操作无效:控件'lblText'从创建它的线程以外的线程访问}:在调试模式下运行应用程序时?:

namespace testFormApp
{
    public partial class Form1 : Form
    {
        public Form1() => InitializeComponent();

        private void Form1_Load(object sender, EventArgs e)
        {
            lblText.Click += (send, arg) => Need = false;
        }

        bool Need = true;

        private async void ButtonStart_Click(object sender, EventArgs e)
        {
            await Task.Run(async() =>
            {
                lblText.Text = "";
                while(Need)
                {
                    lblText.Text += ". ";
                    await Task.Delay(1000);
                }
            });
        }
    }
}

但发布模式下的相同代码可以正常工作。为什么我收到错误?

标签: c#multithreadingruntime-error

解决方案


查看 Hans Passant 对此问题的回答,Why is cross thread operation exception not throw while running exe in bin\Debug他说只有在附加调试器时才启用跨线程错误检查,您也可以手动禁用跨线程错误检查

Control.CheckForIllegalCrossThreadCalls = false;


推荐阅读