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。
抱歉,标题弄混了,但老实说,我不知道该放什么。 所以我创建了一个定时器,它会在每个 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。