c# - 多线程问题

标签 c# winforms multithreading invoke

我正在使用计时器来重置用作警告框的标签。基本上,如果用户做了某件事(更具体地说,出了问题,例如:他使用了程序无法识别的单词),这会尽早捕获出现的问题并将发生的情况返回给他,以便他可以更改输入。

重置会在 5 秒后清空标签,以防止他看到类似“请不要使用中文字符”的内容,并且可能仍然认为旧错误仍然存​​在。这就是我阅读调用时得到的内容(因为我听说 begininvoke 需要 endinvoke,所以我选择了 invoke)。

private void lblWrn_TextChange(object sender, EventArgs e)
{
    Timee = new System.Timers.Timer(5000);
    Timee.Elapsed += new ElapsedEventHandler(timerClearWrn);
    Timee.Enabled = true;
}

string empty = "";
private void timerClearWrn(object sender, ElapsedEventArgs elapsed)
{
    lblWrn.Invoke(new Action<Label>(lblWrn), new object[] { lblWrn, "" });
}

我不太确定我哪里出了问题,并且查找示例,无法弄清楚要更改哪一部分。有人可以向我解释这个错误或调用更多吗?

最佳答案

如果是Windows Forms应用程序,使用System.Windows.Forms.Timer,则不需要Invoke,因为计时器回调在主线程上执行。

此外,不要在每次文本更改时创建新的计时器。

关于c# - 多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6610429/

相关文章:

c# - 如何向 ContextMenuStrip 和 ToolStrip 添加相同的 ToolStripButtons?

java - Spring如何使用ThreadLocal变量

c# - .Net中的Dictionary在并行读写时是否有可能导致死锁?

c# - 使用 LINQ 组合不同类型的集合

c# - 测试DelegateCommand异步,无需公开处理程序

c# - Microsoft Bot Framework,LUIS,在消息没有意图时采取一些行动

c# - 绑定(bind)文本框

c# - app.config 文件 C# winforms 保留连接字符串

c# - 如何在 MouseEnter 上为 TextBlock 添加下划线

c# - C# 中的条件变量