我有一个简单的程序。它的工作是将文件从A移动到B(诚实地说是一个美化的蝙蝠文件)。
我遇到的问题是它最终会崩溃。
App.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>
App.CS:
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 - 它在带有NullReferenceException的OnStarup块之后出错。
编辑1:对不起,如果我的反应速度不够快(不耐烦,因为他们不耐烦而不耐烦的人),但我已经删除了后台工作人员部分,因为我现在没有使用它。我最后仍然得到相同的Null错误。此处更新了代码以反映BackgroundWorker的删除。
编辑2:删除了App.cs的GUI方面(因为后台工作者和gui是次要的atm)。所以这个程序,就像现在一样,只是
答案 0 :(得分:1)
如果您的主线程在后台任务完成之前退出,并且BackgroundWorker创建了background thread(我认为确实如此,但不是100%确定),那么当您的UI线程退出后台线程时将关闭积极地下来。
尝试保持主线程运行,直到您确定BackgroundWorker已完成,并查看它是否仍然崩溃。如果没有,那么你就发现了问题。
答案 1 :(得分:0)
我使用过这个问题(或者一个非常相似的问题)来设置我的WPF命令行。当我重建应用程序并且没有删除
时,必定会出现此问题StartupUri="Views\MainWindow.xaml"
这意味着在进程运行后,它会尝试访问未初始化的对象,从而产生null异常错误。
至少我确定这就是问题所在。删除StartupUri会删除该问题(虽然现在我有另一个错误,我可能会发布一个新问题)。