簡體   English   中英

C#計時器間隔不起作用

[英]C# Timer Interval doesn't work

如標題中所述,計時器間隔似乎已關閉。 計時器應從“ DateTimePicker”中獲取時間,將其轉換為秒,並將“間隔”更改為在DateTimePicker上設置的時間。 之后,它應該在Twitter上發布一條推文,盡管它不起作用。 它只是使垃圾郵件不斷地傳播。

            private void IntervalChoose_ValueChanged(object sender, EventArgs e) //DateTimePicker
    {
        postInterval.Interval = (IntervalChoose.Value.Hour * 3600) + (IntervalChoose.Value.Minute * 60) + IntervalChoose.Value.Second;
        saveTimerInterval = postInterval.Interval; //saveTimerInterval is set 0 at the beginning
        MessageBox.Show("Current Interval in Seconds: " + postInterval.Interval.ToString());
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (button1.Text == "Start Bot") //Starts program (works)
        {
            IntervalChoose.Enabled = false;
            MessageBox.Show(saveTimerInterval.ToString());
            postInterval.Interval = saveTimerInterval; //Sets the interval (once again, safecall)
            postInterval.Start(); //starts posting.
            button1.Text = "Stop Bot";
        }
    private void postInterval_Tick(object sender, EventArgs e)
    {
        var service = new TwitterService("", "", "", ""); //Auth Keys
        var twitterStatus = service.SendTweet(new SendTweetOptions() { Status = "Hi" + counter });
        if (twitterStatus != null)
        {
            MessageBox.Show("Your Message:\n\n\"" + "Hi" + counter + "\"\n\n has been successfully tweeted.", "Success!", MessageBoxButtons.OK);
            counter++;

        }
        else
        {
            //MessageBox.Show("An Error occured while the Bot was running. Please Contact the Developer.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }
    label2.Text = "Next Post in:\n" + (postInterval.Interval / 3600) + " Hour(s) " + ((postInterval.Interval / 3600) / 60) + " Minute(s) " + (((postInterval.Interval / 3600) / 60) / 60) + " Second(s)";
    }

結果:

圖片1圖片2

從圖片中可以看到,標簽不會刷新,也不會使用新的設置時間。 它只是在隨機時間內隨機發布文本。 先謝謝您的幫助。

Timer.Interval屬性具有以下文檔:

兩次已發生事件之間的時間( 以毫秒為單位) 該值必須大於零,並且小於或等於Int32.MaxValue。 默認值為100毫秒。

(我的重點)

因此3930毫秒僅比每4秒稍快一點。


實現此問題的另一種方法是計算應該提交下一篇文章的日期時間,然后“經常”運行計時器,例如每秒一次,然后檢查當前計算機時間是否已超過計算出的日期時間值。

如果有,請執行任何操作,然后計算應運行的下一個時間點。

正如其他人提到的, Interval屬性期望的是毫秒 ,而不是秒。 無論如何,您無需手動進行轉換。 DateTimePicker返回DateTime值。 您可以使用DateTime.TimeOfDay屬性獲取DateTime的時間部分作為TimeSpan。 時間跨度的屬性返回各個時間部分,或以特定單位度量的總持續時間。 例如, TimeSpan.TotalMilliseconds返回當前時間值(以毫秒為單位)。

您只需要編寫以下內容:

postInterval.Interval = (int)IntervalChoose.Value.TimeOfDay.TotalMilliseconds;

這可以解決無效間隔問題,並且僅在您希望例如每10分鍾或每1小時發送一條消息時起作用。

如果要在設置的時間發送消息,則不能使用System.Windows.Forms.Timer,因為它不允許您設置特定的開始時間或開始延遲。 在這種情況下,您必須使用System.Threading.Timer

最初,我看到的是您以秒為單位設置時間間隔。 但是您需要以毫秒為單位設置postInterval.Interval =(((IntervalChoose.Value.Hour * 3600)+(IntervalChoose.Value.Minute * 60)+ IntervalChoose.Value.Second)* 1000;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM