我有以下 Winforms 层次结构。
Form ==> AForm ==> BForm
还有一个可以为 null 的成员 int? X;
在 FormA
中定义。而在FormB
中,有如下代码。
public partial class FormA: Form
{
public int? X { get; set; }
public FormA(int? x) { X = x }
....
public partial class FormB: FormA, IFormAView
{
public FormB()
{
AsyncCall(() =>
{
int z = X ?? 0;
System.Diagnostics.Debug.WriteLine("X: " + X.ToString() + " z: " + z.ToString());
return z;
}
public static T GetForm<T>(int? x)
{
T form = new T();
form.X = x;
form.Show();
}
GetForm<FormB>(100);
X
从未被分配为 null 或零。我正在尝试关闭和打开表单 FormB
。偶尔 z
为零(可能每 10 次一次)。我设置了一个条件中断,它在 return z
行上的 z==0
时中断。
当遇到断点时。调试写入
X: z: 0
即使调试也显示 FormA:X 不为零。
最佳答案
您正在另一个线程上调用代码来测试 X(使用 AsyncCall 和“X ??”),代码可能会或可能不会在 FormA 构造函数中分配 X 之前或之后运行。
即如果您停止使用 AsyncCall,您应该会得到一致的结果。
关于c# - Winforms构造函数时序错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954243/