我有以下Winforms層次結構。Winforms構造函數時序錯誤?
Form ==> AForm ==> BForm
並且在FormA
定義的爲空的成員int? X;
。在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
永遠不會被指定爲零或零。我正試圖關閉並打開表格FormB
。偶爾z
是零(也許每10次一次)。我設置了一個條件中斷,當z==0
在線return z
上時中斷。
當中斷點被擊中時。調試寫入
X: z: 0
即使調試顯示FormA:X不爲零。
現在很明顯。您正在調用FomrB構造函數(它會啓動您的AsyncCall)。你*然後*調用'form.X = x;'。取決於AsyncCall完成的速度,它在處理X時可能有也可能沒有值。 –