Winforms ShowDialog将Control变量设置为null

时间:2016-12-02 09:10:41

标签: c# winforms showdialog

我使用MVC编程方法,其中控制器引用它正在控制的UserControl

点击UserControl上的按钮时,我在控制器中调用以下代码:

class MyController {
    UserControl targetControl;
    public UserControl TargetControl {
       get { 
         if (targetControl == null) { targetControl = new UserControl();}
         return targetControl;
       }
    }
    ...
    ...
    ...
    public void OnButtonClick() {
        using (OpenFileDialog ofd = new OpenFileDialog()) {
            if (ofd.ShowDialog() == DialogResult.OK) {
                using (MyForm2 f2 = new MyForm2()) {
                    f2.ShowDialog();
                    // when reaching this, targetControl is null....
                    f2.Dispose();
                }
            }
        }
    }
}

我无法弄清楚为什么会出现这种情况,特别是targetControl.InvokeRequired返回会丢失,我理解这是告诉我实际上是在UI线程上执行....

更新 某些下游代码将UserControl的引用显式设置为null,这与ShowDialog无关......

0 个答案:

没有答案