我有一个Windows窗体应用,其中表单的代码包含:
public partial class Form1 : Form
{
bool testBool;
public Form1()
{
InitializeComponent();
}
private async void Form1_Load(object sender, EventArgs e)
{
try
{
await new Form1().Run();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
Console.WriteLine(testBool);
}
private async Task Run()
{
Console.WriteLine(testBool);
testBool = true;
Console.WriteLine(testBool);
}
}
我注意到的是我在控制台中获得的结果是
false
true
false
我希望它在哪里
false
true
true
在此过程中testBool
发生了什么?有没有办法可以在Run()
完成后保留此变量的值?
答案 0 :(得分:1)
testBool
是一个实例字段,每个Form1
都有不同的字段。如果您希望他们共享相同的testBool
字段,请将其标记为static
:
public partial class Form1 : Form
{
static bool testBool;
}
使用static修饰符声明一个静态成员,属于该类型本身而不是属于特定对象。 static修饰符可以与类,字段,方法,属性,运算符,事件和构造函数一起使用,但不能与索引器,析构函数或类以外的类型一起使用。有关更多信息,请参见静态类和静态类成员(C#编程指南)。
答案 1 :(得分:1)
正如您对问题的评论中所述,您正在访问Form1
课程的两个不同实例。
您正在实例化一个新的Form1
并调用该新对象的Run
方法,该方法将打印出false
然后true
,然后当它从中返回时,它会将Form1
的原始testBool
实例值写为false
。
您可能希望将您的类定义为static
,或至少提供公共静态字段,或私有静态与公共静态字段访问器属性或函数。