c# - 调试模式下的 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);
}
});
}
}
}
但发布模式下的相同代码可以正常工作。为什么我收到错误?
解决方案
查看 Hans Passant 对此问题的回答,Why is cross thread operation exception not throw while running exe in bin\Debug他说只有在附加调试器时才启用跨线程错误检查,您也可以手动禁用跨线程错误检查
Control.CheckForIllegalCrossThreadCalls = false;
推荐阅读
- java - 为什么即使我的密码正确,我在 Java 程序中访问 MariaDB 的尝试也会给我一个“拒绝访问”异常?
- angular - 造型垫标签 - Angular Material
- node.js - 我是否应该将任何内存选项传递给在 Kubernetes pod 上运行且有限制的 nodejs 应用程序?
- android - 在 Android Studio 中使用传感器数据改变音量
- php - 对象方法不返回结果
- android - 无法加载资产 [颤振]
- java - Java 8 Streams - 如何比较元素?
- python - 如何从交叉验证分数进行预测?
- javascript - 使用 `const` 声明 ES6 函数并不能使其全局可用,但 `var` 可以
- python - 在 Windows 10 上的 PyCharm 中安装 numpy