2009-08-27 12 views
0

こんにちは私はいくつかのファイルを移動してデータベースに入れる小さなアプリケーションを作成しました。アプリケーションがタイムアウトを必要とすることを除いて、これはうまくいきます。.netデスクトップアプリケーションのタイムアウトを設定する

私のアプリが2時間以内にタスクを完了しなかった場合は、すべてが開き、すべてがロックアウトされます。私は、私のアプリケーションが2時間開いていればそれを閉じると言う必要があります。

アプリケーションでタイムアウトを設定することができました。私はこのためにgoogleを持っていて、timeout =無限とthreading.sleep = 200についてsystem.threadingでいくつかのものを見つけましたが、実際にこれを理解していません。

もう1つの考えは、タイマーを使用して2時間までカウントしてから、closeメソッドを呼び出すことです。このシームはちょっとしたチートのようです。 C#またはVbの

のいずれかでタイムアウトに

任意のアイデア


悲しいことに、これは、アプリケーションが失敗した場合、これがないDB接続のためではありません。

答えて

1

アプリケーションのインスタンスを1つだけ同時に実行することはどうですか?

スケジューリングが変更されていると思われます。スケジューリングを変更せずにアプリケーションの複数のインスタンスを防ぐ方法として、このコードを見てください。

static void Main(string[] args) 
{ 
    Mutex flag = new Mutex(false, "UNIQUE_NAME"); 
    bool acquired = flag.WaitOne(TimeSpan.FromMilliseconds(0)); // 0 or more milliseconds 
    if (acquired) 
    { 
     Console.WriteLine("Ok, this is the only instance allowed to run."); 

     // do your work, here simulated with a Sleep call 
     Thread.Sleep(TimeSpan.FromSeconds(5)); 

     flag.ReleaseMutex(); 
     Console.WriteLine("Done!"); 
    } 
    else 
    { 
     Console.WriteLine("Another instance is running."); 
    } 
    Console.WriteLine("Press RETURN to close..."); 
    Console.ReadLine(); 
} 

、あなたのミューテックスを放棄しないでください... ;-)

HTH

0

別のオプションはどうですか?プロセスが現在実行中かどうかを示すフラグを設定します。

プロセスは2番目の1を起動するか、最初の1を閉じたり、タイマーを設定し、数分後に再度チェックすることもいけない実行されている場合(?)

+0

これは仕事ができる、アプリケーションが転倒して故障した場合は、このフラグを削除しないだろうし、それがあろうが走りません – Paul

0

たぶんたDbConnection /たDbCommandオブジェクトのタイムアウトですより適切な(MSDNをご覧ください)

関連する問題