問題タブ [system.timers.timer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# - タイマーが終了するまでアプリケーションを一時停止する方法は?
特定の時間待機する必要があるアプリケーションがありますが、必要に応じて現在の操作をキャンセルできる必要もあります。次のコードがあります。
以下は、タイマー終了イベントのイベント ハンドラーです。
while ループは、タイマーが終了するまで、またはキャンセル要求が入力されるまで無限にループします。この機能を保持したいのですが、タイマーが終了するのを待っている間、永遠にループしたくありません。私のタイマーは、数日の間隔で実行するように設定できるため、長時間ループしても意味がありません。
これを行う別の方法はありますか?
私はできることを知っています:
ただし、これはブロックされ、キャンセル要求を出すことができません。
編集:ここで一時停止する必要があるもの/理由を詳しく説明するために、アプリケーションのより詳細な説明があります。基本的には定期的に「仕事」をするアプリが欲しいです。したがって、以下の回答の1つに基づいて、次のようなことをした場合:
次に、サービス/コンソール アプリが起動し、終日タイマーを設定する無限ループに入ります。以前は、次の場所で他のコードの実行を実際に停止していました。
少なくとも機能しましたが、前述のように、スレッドを一時停止するためのリソースを集中的に使用する方法になる可能性があります。基本的に、私が本当に必要としているのは、タイマーが切れるまでスレッドをブロックする方法です。
EDIT2:これは、待機ハンドルを使用して機能するように見える私の最終的な実装です...
c# - System.Timers.Timer が Elapsed イベントを発生させるときに複数のスレッドを作成するのはなぜですか?
などを作成するSystem.Timers.Timer
と...
間隔を 1000 に設定した結果:
間隔を 2000 に設定した結果:
Elapsed
イベントが発生しているときに、イベントが異なるスレッドを表示していることがわかります。値を(1000ではなく)2000などのより高い値に変更するInterval
と、同じスレッドにとどまるように見えます。
何故ですか?
独自のスレッドで起動するが、複数のスレッドではなく 1 つのスレッドで起動するタイマーが必要です。
c# - 間隔が異なる複数のタイマー、同じターゲットへの書き込み
私は、さまざまなデータ ソースからさまざまなデータ インポート ロジックを実行し、最終的に単一のターゲットである MS CRM インスタンスに書き込む Windows サービスを作成しています。現時点で唯一問題があると思うのは、CRM への書き込み部分です。異なる(場合によっては同じ)データソースからのデータの同時読み取りは、実際には問題になるべきではありません(これについては間違っているかもしれません...)そこで、同時書き込み(作成または更新)がないことを確認する方法を思いつきました) CRM に。
現時点での一般的な設計は次のとおりです。
サービスの開始時に何が起こるか:
タイマーの間隔が切れるとどうなるか:
そしてExecute
、オブジェクトを拡張するすべてのメソッド内BaseSyncStrategy
で、対象の CRM インスタンスで何かを更新または作成するたびに、次のようにします。
そして、CRMへの同時書き込みが発生しないようにするための簡単なコード(と思います):
これはサウンドデザインですか、それとももっと良い方法がありますか?
c# - Timer.Elapsed イベントに相当する UWP
数分ごとに自動的にイベントを発生させる必要があります。以下のように、Windows フォーム アプリケーションで Timers.Elapsed イベントを使用してこれを実行できることを知っています。
私は多くのことをグーグルで検索し、UWP でこれに相当するものを見つけるのに苦労しました。
c# - C# Timer.Elapsed イベントが 2 回連続して発生する
システムの「セルフチェック」アプリケーションの一部として、60 秒ごとに DLL の静的メソッドを呼び出すアプリケーションがあります。メソッドを手動で実行すると、すべて 10 秒以内に完了します。私の問題は、timer.elapsed イベントが 2 回、次々と発生していることです。それに加えて、タイマーが経過するたびに、イベントがもう一度発生します。(たとえば、最初は2回、2回目は3回、3回目は4回など)経過イベントの開始時にtimer.AutoReset = falseを設定し、timer.Enabled = falseを設定してからtrueに設定しようとしましたイベントの終わりに。イベントの間隔をリセットしてみました。私が見つけたすべての投稿は、上記のアクションでこの問題が解決されたはずであることを示しています。足りないものを見つけるのを手伝ってくれる人はいますか?
c# - System.Timers タイマーはいつ破棄されますか?
タイトルで述べたように、System.Timers
Timer はいつ破棄されますか?
コンソール アプリケーションを実行し、単純に次のコードを使用するシナリオでは
タイマーはある時点で破棄されますか、それとも永遠に「生きている」のですか? 注: 「永久に」とは、アプリケーションが閉じられるまでという意味です。