gpt4 book ai didi

c# - 为什么在更改用户控制代码后构建应用程序时应用程序会导致整个 visual studio 崩溃?

转载 作者:行者123 更新时间:2023-12-05 04:22:57 26 4
gpt4 key购买 nike

此链接中接受的答案中的原始用户控制代码:How to animate dots in UserControl Paint event?

我稍微修改了一下,添加了保存修改的选项。所以我添加了一些用户设置属性,其中之一是 SaveState :

[DefaultValue(false)]
public bool SaveState
{
get => saveState;
set
{
if (value)
{
saveState = value;
}

Properties.Settings.Default.SaveState = value;
Properties.Settings.Default.Save();
}
}

在构造函数中:

public LoadingLabel()
{
InitializeComponent();

SaveState = Properties.Settings.Default.SaveState;
}

问题是当我添加另一行来更新 SaveState 时,整个应用程序和 visual studio 崩溃,visual studio 重新开始,而没有将控件拖到 form1 设计器。崩溃发生在我进行更改之后以及将控件拖动到 form1 设计器时。

这是我改变的:

[DefaultValue(false)]
public bool SaveState
{
get => saveState;
set
{
if (value)
{
saveState = value;
SaveState = value;
}

我添加了一行:

SaveState = value;

因为它正在更新 saveState 并且工作正常但在视觉上我没有看到属性 SaveState 发生变化:

SaveState 设置为 true,但当我将其更改为 false 时,只有当我将控件移除并再次拖动到设计器时,我才会看到它为 false。

SaveState

不确定为什么在尝试自行更新 SaveState 时崩溃。

最佳答案

当你写作时

SaveState = value;

你调用 setter。

当您在 setter 的代码中这样做时,这会导致无限递归 - 您在 setter 中分配给 SaveState,它调用 setter,后者分配给 SaveState,它调用 setter,它分配给 SaveState,后者调用 setter,等等,这会导致 IDE 崩溃。

故事的寓意:永远不要赋值给setter中的属性; 始终改为分配给支持字段。

关于c# - 为什么在更改用户控制代码后构建应用程序时应用程序会导致整个 visual studio 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73848925/

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