2016-04-17 9 views
0

私はこのコードを使用して、インストールされたプログラム(appwiz.cpl)と私のipconfigを5秒ごとにチェックしています。System.Threading.Timerは常に動作しません

私はGUIを持っているのでスレッドを使用しています。アクティブにしておく必要があります。

public void time() { 
var time = new System.Threading.Timer(x => 
{ 
    conf(); 
    ncpa("ipconfig /all"); 
}, null, 5000, Timeout.Infinite); 
} 

私はそれが動作time();

として、「NCPA」メソッドの最後に私のコールバックを持っていますが、数分後にスレッドがコード259で終了しますと、もう実行されません。

ありがとうございました!

+0

コールバックとはどういう意味ですか? –

+0

私はメソッド 'ncpa()'の最後で 'time()'をもう一度呼び出すことにします – Maske13

+0

タイマーはすでに再発するタスクを表していますので、 'time()'をもう一度呼び出すと、 。だから5秒ごとに別のタイマーが起動され、他のタイマーは起動し続けます(私はあなたがどこにでも終了するのを見ません)。その "コールバック"を削除してみてください。 – bassfader

答えて

1

最初に、定期的な呼び出しに「無限」を使用しました。つまり、定期的に通知されません。さらに、このような変数で時間を使用すると、「時間」変数の範囲外に出た後にGCによって収集される可能性があります。変更を行い、 "time"変数をクラスのフィールドにします。

インスタンスフィールドの場合、オブジェクト自体には参照がない場合は参照がないと見なされます。静的フィールドにすると、それはルートとみなされ、手動で変更しない限り、参照は保持されます。例えば

class Program 
{ 
    private static System.Threading.Timer _timer = new Timer(_ => Console.WriteLine("Hi"), 
     null, 1000, 1000); 
    static void Main(string[] args) 
    { 
     Console.ReadLine(); 
    } 
} 

は、この情報がお役に立てば幸いです。

+0

あなたは私にどのように表示できますか? – Maske13

+0

あなたのクラスの@Tomは "private System.Threading.Timer _timer = new ...."を入れます。 –

+0

何らかの理由で私はそれを動作させることができません。あなたのコードを使って答えを編集できますか?私は何か間違ったことをしたと思う。 – Maske13

関連する問題