在 DEBUG 模式下出现 TPL 问题,在 Release 模式下一切正常
TPL issue when DEBUG mode, in Release mode all is okay
为什么我得到一个异常:{ 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 thrown while running exe in bin\Debug 他说跨线程错误检查仅在附加调试器时启用,您也可以手动禁用跨线程错误检查
Control.CheckForIllegalCrossThreadCalls = false;
为什么我得到一个异常:{ 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 thrown while running exe in bin\Debug 他说跨线程错误检查仅在附加调试器时启用,您也可以手动禁用跨线程错误检查
Control.CheckForIllegalCrossThreadCalls = false;