WPF app启动问题

时间:2010-05-20 14:55:42

标签: wpf xaml startup

我的大脑遍布地图,试图立即完全理解Unity。所以我决定潜入并开始在分支中添加它以查看它需要我的位置。令人惊讶的是(或许没有),我只是让我的darn应用程序正确加载。

似乎正确的方法是在App.cs.中覆盖OnStartup。我从App.xaml中删除了我的StartupUri,因此它不会创建我的GUI XAML。我的App.cs现在看起来像这样:

public partial class App : Application
{
    private IUnityContainer container { get; set; }

    protected override void OnStartup(StartupEventArgs e)
    {
        container = new UnityContainer();
        GUI gui = new GUI();
        gui.Show();
    }

    protected override void OnExit(ExitEventArgs e)
    {
        container.Dispose();
        base.OnExit(e);
    }
}

问题是当我启动应用程序时没有任何反应!我在container任务中设置了一个断点,它永远不会被击中。

我错过了什么? App.xaml目前设置为ApplicationDefinition,但我希望这可以工作,因为我正在查看的一些示例Unity + WPF代码(from Codeplex)执行完全相同的操作,除了它有效!

我也通过单步启动应用程序,它最终点击了App.xaml的第一行。当我进入这一行时,就是当应用程序刚开始“运行”时,但我什么都没看到(而且我的断点没有被击中)。如果我在示例应用程序中执行完全相同的操作,那么单步进入App.xaml会使我进入OnStartup,这是我期望发生的事情。哎呀!

我还从头开始创建了一个新的WPF应用程序,删除了StartupUri,覆盖了OnStartup(),它也有效。 WTH?

将Unity构造放入GUI的Window_Loaded事件处理程序中是不是很糟糕? 真的是否需要处于应用级别?

4 个答案:

答案 0 :(得分:4)

仔细检查App.xaml中x:Class与App.xaml.cs中相同的命名空间/类。从另一个项目中复制/粘贴很容易,忘记修改它。

如果由于任何原因您无法解决此问题,请移除App.xaml并添加Main() new App().Run()。如果这也不起作用,那么这里真的很奇怪。

答案 1 :(得分:1)

您的问题似乎与Unity无关......请确保:

  • 启动对象设置为YourProject.App(在项目属性页面中)
  • App.xaml的构建操作设置为“ApplicationDefinition”

否则,我看不出有什么理由不起作用......


更新:只是另一个想法...尝试将StartupUri设置回App.xaml,并在OnStartup中调用基础实现:

protected override void OnStartup(StartupEventArgs e)
{
    container = new UnityContainer();
    base.OnStartup(e);
}

答案 2 :(得分:1)

在我的情况下,我点击了" 非常奇怪的东西" Julien Lebosquain提到的部分。

我一直在检查并重新检查名称,命名空间,事件处理程序等,但看不出有什么问题,但我的WPF MainWindow.xaml仍然先打开,绕过了所需的启动方法。

最终,我删除了MainWindow.xaml ...但是它仍然首先弹出。此时,我清理了解决方案,从磁盘中删除了二进制文件(在更改启动项目后)并关闭并重新打开解决方案。

这个'固定'我的问题。

答案 3 :(得分:0)

我遇到了类似的问题 - 我的应用程序构造函数和OnStartup没有被调用(断点未被命中)。如果其他人遇到此线程,那么另一件事可能会出错。

我有几个应用程序的解决方案,其中一个只是我用来管理一些XML文件的实用程序。它没有得到太多的使用,所以我基本上忘记了它。最初,我的版本是针对"任何CPU",但最近我不得不将它们更改为" x86"由于我正在使用的库。今天,我需要运行这个实用程序,但它崩溃了,在调试器中没有调用App类中的任何内容。在检查名称空间(可以)之后,我决定清理项目(如上所述)。当我试图运行该应用程序时,我收到一个VS无法找到EXE的错误。显然,VS正在运行一个旧的"任何CPU" EXE它在输出目录中发现崩溃,然后在我清理项目时被删除。我检查了Build |配置管理器,果然,我还没有为" x86"选择实用程序。建立。一旦我添加它,一切都很好。希望这会有所帮助。