代码之家  ›  专栏  ›  技术社区  ›  WernerCD

C#WPF应用程序在结束时崩溃

  •  1
  • WernerCD  · 技术社区  · 14 年前

    我有一个简单的程序。它的工作是把文件从A移到B(诚实地说是一个美化的蝙蝠文件)。

    我的问题是它崩溃了。。。最后。

    应用程序.xaml.cs:

    <Application x:Class="app.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                 xmlns:properties="clr-namespace:app.Properties" 
                 StartupUri="Views\MainWindow.xaml">
        <Application.Resources>
            <properties:Settings x:Key="Settings" />
        </Application.Resources>
    </Application>
    

    应用程序:

    using System.ComponentModel;
    using System.Linq;
    using System.Windows;
    using app.Model;
    using app.Properties;
    using app.Views;
    
    namespace app
    {
        public partial class App
        {
            protected override void OnStartup(StartupEventArgs e)
            {
                base.OnStartup(e);
                string xmlDoc = Settings.Default.Config;
                var parms = new MoveFilesParams(xmlDoc);
                Process.MoveFiles(parms);
            }
        }
    }
    

    简单的身体。假设我没有给它传递命令行参数,它应该只是自动运行。使用参数,它将运行WPF。

    它从应用程序设置中填充的xmlDoc中提取设置。然后它通过Parms类传递这些设置。然后它要么运行,要么popu

    在运行时,我在OnStartup中尝试了一个try/catch,但没有出现错误,它在OnStarup块之后出现了一个NullReferenceException错误。

    编辑1:抱歉,如果我没有足够快的反应(是的,因为他们不耐烦,不耐烦的人投票),但我已经删除了背景工作部分,因为我现在不使用。我最后还是得到了同样的空错误。更新了此处的代码以反映BackgroundWorker的删除。

    编辑2:删除App.cs的GUI特性(因为后台工作程序和GUI是辅助atm)。所以这个程序,从现在起,只是

    • 荷载
    • 从app.config中提取xml位置
    • 从XmlDoc加载parm类
    • 成功移动文件
    • 出现未处理的空引用异常的崩溃错误。我可以评论所有的事情,它在OnStart的“finish”上出错
    2 回复  |  直到 14 年前
        1
  •  1
  •   Jon    14 年前

    如果在后台任务完成之前退出主线程,如果后台工作人员创建了 background thread (我想是的,但不是100%肯定),然后当你的UI线程退出后台线程将被积极关闭。

    在确定BackgroundWorker已经完成之前,尝试保持主线程的运行,并查看它是否仍然崩溃。如果没有,那么你就发现了问题。

        2
  •  0
  •   Community CDub    8 年前

    WPF Command Line

    我用这个问题(或者一个非常类似的问题)来设置我的WPF命令行。问题一定是在我重新构建应用程序时出现的,并且没有删除

    StartupUri="Views\MainWindow.xaml"
    

    这意味着在进程运行之后,它将尝试访问一个未初始化的对象,并给出一个空异常错误。

    至少我确定这就是问题所在。删除StartupUri可以消除这个问题(尽管现在我有另一个错误,我可能会提出一个新的问题)。