私のWPFアプリケーションは、「ブートストラップ」プロセスの早い段階でThreading.Timerを開始します。タイマー間隔は100msであり、タイマーデリゲートのコードは通常約70msかかる(一連のfor
ループでいくつかの操作を実行しますが、そのうちのいくつかはシリアルポートからの読み取りを含みます)。タイマーを起動すると、残りのアプリケーションが初期化されます(DIフレームワークに登録されたタイプ、ビューの作成、ビューモデル、その他のさまざまな初期化関数)。これらの数秒間に、タイマー内で実行されるコードは完全に「停止」します。それは決して失敗することはなく、シリアル読み込みのどれも失敗することはありません(それは純粋に幸運ですか?)タイマーコードは約3秒間実行を一時停止するようです。なぜThreading.Timerはデリゲートを停止していますか?
私は、この(UIスレッド上の)スタートアップのすべての優先度が高くなっているため、タイマースレッドがCPU時間を取得できないと考えられます。私はそれについて何かできることはありますか?後でブートストラッププロセスでタイマーを起動することも可能ですが、最初に他のソリューションを試してみたかったのです。
Threading.Timerは "re-entrancy"(正しい用語である場合)をどのように処理しますか?つまり、以前の呼び出しがまだ実行されている間にタイマーが "tick"しますか?前の呼び出しが最終的に完了したときに次の呼び出しが「キューに入れられ」実行されますか、それとも自分で処理する必要がありますか?