【发布时间】:2021-07-15 14:42:38
【问题描述】:
为什么我得到一个异常:{ 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);
}
});
}
}
}
但相同的代码在发布模式下工作没有问题。为什么会报错?
【问题讨论】:
-
除了原因(我强烈怀疑发布模式不可重现)和修复之外,上面的代码设计得很糟糕。你能告诉我们代码背后的想法吗?
-
我正在尝试学习主题:取消任务的方法 |现在使用布尔变量,在此之后我将检查取消令牌
-
Task.Run将在不得访问 UI 元素的线程池线程上运行您的代码。只需删除await Task.Run(async() =>。 -
他的代码有问题,但我的代码没有问题。代码在发布模式下正常工作,但在调试模式下我收到该错误。在 Visual Studio 之外,如果我转到应用程序文件夹并打开我的应用程序,他将正常工作,因为代码没有问题。我的英语不好抱歉,我知道如何解释我的问题。
标签: c# multithreading runtime-error