0

.NET 4 で単純な Windows アプリケーションを開発しました。アプリケーションにパラメーターを渡したいのですが、このパラメーターが空の場合、アプリケーションは実行を継続せず、終了する必要があります。

main メソッドに入力パラメーターを追加します。Visual Studio でデバッグすると問題なく動作しますが、アプリケーションを直接実行すると、Windows で次のエラーが発生しました。

「アプリケーションが動作を停止しました」

どうすればそれを処理できますか?いくつかのコードをテストしましたが、機能しません

 Application.ExitThread();
 Application.Exit();

これは主な方法です:

 [STAThread]
 static void Main(string[] args)
 {
     if(args.Count()==0)
      Thread.CurrentThread.Abort(); 

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new Form1());
 }

Windows イベント ビューアーを調べたところ、このエラー イベントが見つかりました

Application: WindowsFormsApplication1.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Threading.ThreadAbortException
Stack:
at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort()
at WindowsFormsApplication1.Program.Main()

そして別:

Faulting application name: WindowsFormsApplication1.exe, version: 1.0.0.0, time 
stamp:    0x50e775e3
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17514, time stamp: 0x4ce7c78c
Exception code: 0xe0434352
Fault offset: 0x000000000000a49d
Faulting process id: 0x15b4
Faulting application start time: 0x01cdeade1bdab018
Faulting application path: C:\WindowsFormsApplication1\WindowsFormsApplication1 
 \bin\Debug\WindowsFormsApplication1.exe
Faulting module path: C:\Windows\system32\KERNELBASE.dll
Report Id: 5a6d1a1f-56d1-11e2-8ffd-20cf30e7bd24
4

2 に答える 2

4

あなたが提供したコードでこれを期待します。を呼び出すThread.Abort()と、スレッドで例外が発生します (ThreadAbortExceptionこれはキャッチされません)。

引数なしで処理を停止するだけの場合は、次のように戻ります。

[STAThread]
 static void Main(string[] args)
 {
     if(args.Length ==0) return; // Will leave and end the application

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new Form1());
 }

また、単に行うCount()ときに配列で使用しています。Length細かいところですが。

于 2013-01-04T12:54:07.453 に答える
2

上記のコードの理由がわかりません。

このパラメーターが空の場合、アプリケーションは実行を継続せず、終了します。

この方法で簡単にコーディングできます

 [STAThread]
 static void Main(string[] args)
 {
     if(args.Length > 0)
     {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Application.Run(new Form1());
     }
 }
于 2013-01-04T12:55:28.510 に答える