System.Timer 奇怪的行为

System.Timer weird behavior

抱歉,标题弄混了,但老实说,我不知道该放什么。 所以我创建了一个定时器,它会在每个 T 间隔触发一个事件。这个简单的事件将仅附加文本并以 MMORPG 样式显示它。它确实有效,但奇怪的是它有时不会触发事件(我解释得对吗?)。

这是图片,所以你可以理解我的意思:

这是我的代码:

baloon = new System.Timers.Timer(30);
baloon.Elapsed += OnTweakTimedEvent_baloon;
//baloon.Elapsed += new ElapsedEventHandler(OnTweakTimedEvent_baloon);

private void OnTweakTimedEvent_baloon(object sender, ElapsedEventArgs e)
{
    lbBaloon.Text += message[letterCount]; 
    letterCount++;
    if (letterCount > message.Length - 1) //stops timer when finishes
    {
        letterCount = 0;
        baloon.Enabled = false;
        lbBaloon.Text = message; // displays the full message when it ends
    }
 }

一个相当明显的问题是您将 System.Timers.Timer 用于 UI,而没有任何同步。如果没有 SynchronizationContext,此计时器将在后台线程上引发事件,这可能会导致各种问题,因为 UI-类 只能由 UI 线程安全访问.

我建议使用 SynchronizationContext 或切换到 winforms 计时器。有关详细信息,请参阅 timer comparison