タスクバーに(非表示のフォームを介して)存在するプログラムがあります。このプログラムは、起動が完全に成功したかどうかを表示するポップアップウィンドウ(カスタムビルドのwpfウィンドウクラス)を生成します。このプログラムは(実際の製品が実行されるため)起動時に実行するように設定されており、コンピューターを起動してプログラムを起動すると、プログラムが応答を停止します。これは、2番目のウィンドウ(実際のユーザーインターフェイス)も開いて起動するためか、コンピューターで一度に多くのことが発生しているためかはわかりません。これを引き起こしているものについてのアイデアはありますか?
2 に答える
私の経験では、WPF アプリは予期しないさまざまな理由でクラッシュする可能性があるため、WPF アプリの起動に関する問題のトラブルシューティング方法を次に示します。
最初に、アプリに適切な例外処理があることを確認してください。すべてのエントリ ポイントで try/catch を実行し、あなたのケースでは、未処理の例外イベント リスナーがアプリの最初の可能な場所に接続されています。
AppDomain.CurrentDomain.UnhandledException += (s,args)=>{
MessageBox.Show("Unhandled Exception: "+args.ExceptionObject);
};
次に、直接実行したときにアプリが正しく実行されることを確認します
WPF アプリのスタートアップはやや不明瞭で、その Main() メソッドは生成された部分クラス obj\App.g.cs にあり、このクラスの他の部分は空の App.xaml.cs BAML の逆シリアル化で問題が発生している場合MainWindow.xaml.cs コードが実行されることさえありません。その場合に必要なことは、obj\App.g.cs の内容を新しいクラス Program.cs にコピーし、それをアプリのスタートアップ クラスにして、上記のエラー ハンドラーを最初の行として配置することです。 Program.cs にコピーした Main() メソッド:
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks","4.0.0.0")]
public static void Main() {
AppDomain.CurrentDomain.UnhandledException += (s,args)=>{
MessageBox.Show("Unhandled Exception: "+args.ExceptionObject);
};
Storm.Designer.App app = new Storm.Designer.App();
app.InitializeComponent();
app.Run();
}
たぶん、あなたのアプリケーションは、wpf アプリがロードされた後にロードされたサービスに依存しているでしょうか??? タスク スケジューラを使用して wpf アプリを起動すると、次の便利なパラメーターを設定できます: 起動時、タスクを x 分間遅らせる、クラッシュした場合はアプリを再起動するなど。