1

アプリに同期タイマーがあり、特定の時間に関数を起動します...次に、その関数を呼び出すまでの残り時間を知りたいです。

これは私のタイマーへの呼び出しです:

var syncTime = time.activitylog;
double time = TimeSpan.Parse(syncTime).TotalMilliseconds;

System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
myTimer.Interval = time;
myTimer.Start();  

次の電話までの時間を取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

0

別のタイマーを使用して、その間隔を必要な値に設定できます。これは、元のタイマーの間隔の正確なパートタイムです。次に、それらを同時に開始します。つまり、同時に開始します。

アップデート :

たぶん、このコードは私のソリューションをよりよく説明しています:

public Form1()
        {
            InitializeComponent();
        }

        System.Windows.Forms.Timer trOriginal = new System.Windows.Forms.Timer();
        System.Windows.Forms.Timer trRemain = new System.Windows.Forms.Timer();
        double remain = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            trOriginal.Interval = 1000;
            trRemain.Interval = 1;
            trOriginal.Tick += new EventHandler(trOriginal_Tick);
            trRemain.Tick += new EventHandler(trRemain_Tick);
            trOriginal.Start();
            trRemain.Start();
        }

        void trRemain_Tick(object sender, EventArgs e)
        {
            remain -= trRemain.Interval;
            Console.WriteLine("remain MS to next event : " + remain);
        }

        void trOriginal_Tick(object sender, EventArgs e)
        {
            remain = trOriginal.Interval;
        }
于 2013-03-06T12:55:18.250 に答える
0

を使用して、System.Diagnostics.Stopwatchすでに経過した時間を追跡し、のStopwatchティックごとにを再起動できますTimer

Stopwatch watch = new Stopwatch();
private void DisplayTimeEvent(object sender, EventArgs e)
{
    watch.Restart();
    // Whatever is supposed to happen, when the timer ticks
}

これで、次にイベントが発生するまでの残り時間を知りたいときはいつでも、次のことができます。

long timeLeft = myTimer.Interval - watch.ElapsedMilliseconds;
于 2013-03-06T13:20:09.880 に答える