私はいくつかのC#Winforms / WPFコードで少し遊んでいて、何か奇妙なことに遭遇しました。私がこのようなコードを持っているとしましょう:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DoSomething();
// maybe something more if everything went ok
}
}
私が困惑しているのは、コンストラクターがジョブを終了する前に、メソッドDoSomethingからアプリケーションを単純に閉じることができないことです。実行中に何かがDoSomething
失敗した場合は、すぐにアプリケーションを閉じる必要がありますが、アプリケーションは実行を続け、パーツ// maybe something more...
を実行してから閉じますが、それでは遅すぎます。
フォームを閉じるためのコードをコンストラクター自体の中に次のように配置return;
する必要があります。そうすれば機能しますが、それが受け入れられる解決策ではありません。このような検証ロジックをコンストラクターからメソッドに移動しようとしています。
私は次のようなことを試みました
public void DoSomething()
{
Close();
}
また
public void DoSomething()
{
Application.Current.Shutdown();
}
しかし、それは機能していないようです。はい、どちらのコードもアプリケーションを閉じますが、コンストラクターコードが完全に完成した後でのみです。
Why
私はそのようなものが必要でしょうか?起動時に、接続やハードウェアの可用性、ユーザーの検証など、さまざまなことを確認する必要があるため、何かが失敗した場合は、それ以上コードを実行する意味がありません。
WinformsとWPF(したがってタグ)で同じ原理を試しましたが、同じように機能します。
誰かが説明やおそらく解決策を提供できますか?