gpt4 book ai didi

.net - 为什么非法跨线程*未*被检测到?

转载 作者:行者123 更新时间:2023-12-02 08:51:59 27 4
gpt4 key购买 nike

全部:

我已经创建了一个 Windows 窗体和一个按钮。在另一个线程中,我试图更改按钮的文本,但它崩溃了;但是如果我尝试更改按钮的颜色,它肯定会成功。我认为如果您更改任何 Windows 窗体控件属性,它就会崩溃。有人能告诉我这是怎么回事吗?

这是我的代码,它不会在注释掉的行上崩溃(但我认为它应该):

Thread thr = new Thread(() => { 
//myButton.ForeColor = Color.Purple; // this never causes a crash :=(
myButton.Text = Color.Purple.ToString(); // this always causes a crash.
}); //
thr.Start();

如有任何见解,我们将不胜感激!

迈克尔

最佳答案

Control.ForeColor 属性 setter 调用 Invalidate() 方法。这在 Windows 中是线程安全的。它只是在内部窗口状态中设置“此窗口需要重新绘制”状态位。直到稍后运行 Paint 事件时,窗 Eloquent 真正发生任何事情。在 UI 线程上。

Winforms 包含显式代码来抑制异常。

其他示例是读取 Text 属性(而不是写入)。以及已记录的 InvokeRequired、BeginInvoke、EndInvoke、Invoke 和 CreateGraphics。就是这样。

关于.net - 为什么非法跨线程*未*被检测到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7813403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com