为什么 Application.OnStartup 没有被调用?

17

我有一个WPF .NET 4 应用程序,在其中覆盖了OnStartup方法以处理传递给我的应用程序的文件。然而,当应用程序运行时似乎并没有调用这个方法。我在里面设置了一个异常甚至断点,但它启动后完全忽略了这个方法。

我错过了什么吗?

App.xml.cs的代码:

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        throw new NotImplementedException();
    }
}

App.xaml的内容:

<Application x:Class="XGN_Image_Downloader.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">
<Application.Resources>

</Application.Resources>
</Application>

编辑:找到了!在App.xaml中的x:Class属性与App.xaml.cs类不匹配 :) 这就是你在喝酒时编程所得到的。 (感谢这个线程:WPF app startup problems


只有这些信息无法重现。我创建了一个WPF应用程序,将你的代码粘贴到现有的App代码后面,在抛出异常的那一行设置了一个调试断点,然后运行它,调试器就会在那个语句上中断。你能否发布你的其他与应用程序相关的代码?可能是app.xaml文件吗? - Merlyn Morgan-Graham
你的解决方案中有多个项目吗?是否将该项目设置为启动项目? - Sandeep G B
另一个项目是一个类库。解决方案中只有2个项目。该项目被设置为启动项目。除了我的app.xaml之外,我只有一个单独的主窗口,里面没有任何花哨的东西。 - Jonas Van der Aa
1
尝试在构造函数中加入一个空参数的构造函数 public App() { } ,并设置一个断点或者抛出异常。你的应用程序对象是否被成功创建了呢? - Rick Sladkey
@Jonas Van der Aa:如果可以的话,请在这个问题下发表一个答案。然后,您可以将自己的答案设为被接受的答案。这将意味着任何其他人来到这里都能看到有一个已被接受的答案。这也将意味着遇到相同问题的人可能会赞同您的答案 :) - Alastair Pitts
显示剩余3条评论
2个回答

25

我找到了问题所在,我需要将App.xaml中的x:Class属性设置为与App.xaml.cs类相同的类。这是由于我自己糟糕的重构引起的错误。


1
我来晚了,但即使我的x:Class属性没问题,我也遇到了同样的问题。如果您的项目在属性中没有指定“启动项”,似乎OnStartup也不会触发。应用程序仍然会启动,只是不会在启动时触发。 - BenCr

1

x:Class 必须填写在 App.xml.cs 文件中的命名空间和精确类名。

例如:<Application x:Class="命名空间.类名"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接