c# - Winforms构造函数时序错误?

标签 c# winforms

我有以下 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/

相关文章:

C# 喜欢 VBA 中的 List<T>

c# - 完全的 azure 新手 - 它是什么以及如何检查我的更改是否已提交

c# - 动态创建winforms控件

c# - ChangeLog OriginalValue 与 EF Core 更新实体上的 CurrentValue 相同

c# - 如何跳出 C# 中的 foreach 循环?

c# - 为 Windows 窗体实现 TypeConverter

c# - 如何在 C# 中链接 XY 条形图中的两个 sql 列

c# - 连接未关闭。连接的当前状态为打开

c# - 在父窗体中居中 MessageBox

c# - 为什么我的本地机器可能会错误地格式化国际日期?