[英]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
}
}
一个相当明显的问题是,您正在为 UI 使用System.Timers.Timer
,而没有任何同步。 如果没有SynchronizationContext,此计时器将在后台线程上引发事件,这可能会导致各种问题,因为 UI 类只能由 UI 线程安全访问。
我建议使用 SynchronizationContext 或切换到 winforms 计时器。 有关更多详细信息,请参阅计时器比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.