タスクスケジューラを介してファイルをダウンロードしてデータベースに挿入するために呼び出すwinformsアプリケーションがあります。ただし、ファイルがいつ利用可能になるかは予測できないため、タイマー(System.Windws.Forms.Timer
)を使用してファイルをポーリングしました。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
Form1 f1 = new Form1();
if (f1.IsLive)
{
f1.OnLaunch(); // tests DB connection and reads and updates the expiry date list.
if (args[0] == "FullStats")
f1.FullStatsDataPump();
else if (args[0] == "OptionsStats")
{
f1.OptionsStatsTimer_Tick(null, null);
f1.OptionsStatsTimer.Start();
}
else if (args[0] == "OptionsTraded")
{
f1._optionsTradedTimer_Tick(null, null);
f1.OptionsTradedTimer.Start();
}
else
{
EmailManager.InvalidInputArgument(args[0]);
Application.Exit();
}
Application.Run();
}
}
上記のコードスニペットでは、OptionsTradedTimer
/OptionsStatsTimer
両方がファイルをポーリングしてから、で終わるプロセスを開始しますApplication.Exit()
。これは完全に実行されますが、その後、無限のメッセージループでスタックします。Application.Run()
最初のタイマーが作動した直後に呼び出されるので、Application.Exit()
最終的に呼び出されるとメッセージループが終了すると思いました。しかし、コードをステップスルーすると、その後Application.Exit()
、プログラムは元のtimer.tick()に戻りApplication.Run()
、下部のに進みます。Application.Run()
下部にあるが必要なのは、それがないとタイマーが1回だけ刻み、その後アプリが終了するためです。
では、どうすればアプリケーションに終了するように正しく指示できますか?または、どこに電話すればよいApplication.Run()
ですか?