Main()中的代码可以访问或无法访问,具体取决于打开另一个表单

时间:2009-01-26 10:34:13

标签: c# pocketpc

我有一些掌上电脑应用程序,我在这里描述了一个严重的问题:https://stackoverflow.com/questions/472598。在寻找解决方案时,我在Main()中尝试了一些非常愚蠢的代码:

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

并在退出时设置断点。如果我只是运行应用程序,然后关闭窗口,则达到断点。如果我运行应用程序,然后打开另一个窗口:

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

然后从它回到初始窗口:

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

并以与第一次相同的方式关闭最初的一个,从未到达Apllication.exit()代码,并且我的印象是应用程序并未真正关闭(我无法再次打开它)。抱歉,如果描述复杂

编辑:问题是 - 任何想法为什么表现不同?

3 个答案:

答案 0 :(得分:2)

new Tasks()中的{p> Main()Tasks tasksWindow = new Tasks();

不是同一个对象

你有2个任务对象,所以关闭第二个,第一个仍然存在,永远不会死亡。您需要传递QuestionnairesWindow当前Tasks的引用。

您可以使用其他QuestionnairesWindow构造函数执行此操作:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

使用:

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`

答案 1 :(得分:0)

这条线似乎是问题所在:

Tasks tasksWindow = new Tasks();

如果我正确理解您的代码,请在backButton_Click中创建“任务”表单的实例,而不是显示您最初隐藏的实例。这意味着应用程序永远不会终止,因为仍然有一个窗口打开但隐藏。

您可能想要做的是将Tasks表单引用传递给QuestionnairesWindow表单。

答案 2 :(得分:0)

您遇到的问题是,在backButton_Click中,您正在创建“任务”窗口的实例。原始的“任务”窗口仍在运行,只是隐藏了。我怀疑你需要将对原始Tasks表单的引用传递给QuestionnairesWindow,以便它可以选择再次显示它。

您需要在QuestionnairesWindow上添加一个公共/内部方法,您可以在其中设置哪个Tasks表单导致QuestionnairesWindow打开。在调用this.Hide()之前,使用 this 引用在questButton_Click中调用此方法。该引用将存储在QuestionnairesWindow中的私有变量中。

然后在backButton_Click中,使用此私有变量来调用.Show()方法,以显示父窗体。