【发布时间】:2012-07-07 09:37:22
【问题描述】:
这是利用显示一段时间的状态消息的最佳方式吗?
private void SetStatus(Color _color, string _msg)
{
System.Threading.Thread t = new System.Threading.Thread(() =>
{
stsStatusMsg.ForeColor = _color;
stsStatusMsg.Text = _msg;
System.Threading.Thread.Sleep(2000);
stsStatusMsg.Text = "";
});
t.Start();
}
调用示例:
SetStatus(Color.Red, AppMessages["msgALREADYIN"]);
stsStatusMsg(即ToolStripStatusLabel)在整个应用运行过程中只能通过该方法访问。
上面的代码确实有效。消息在控件上显示 2 秒,然后消失...
【问题讨论】:
-
stsStatusMsg是StatusStrip? -
@Ruel : 它是一个 ToolStripStatusLabel
-
您是否考虑过使用另一个控件,该控件基本上是所有状态消息及其发送时间的列表;仅闪烁状态然后将其删除的问题在于它可能会被错过,或者,如果您想实际查看消息是什么,则无法真正做到这一点。否则,请参阅msdn.microsoft.com/en-us/library/ms171728(v=vs.110).aspx - 我很惊讶您没有收到跨线程访问异常。另见stackoverflow.com/questions/1127973/…
-
@dash:见下面的@ruel 评论。我很幸运的原因是 ToolStripStatusLabel 不继承自
Control -
@e4rthdog 不用担心,但从调试/日志记录的角度来看,有一个地方可以查看所有发送给用户的状态消息(以及何时发送给用户)非常有用。我通常在屏幕底部有一个可停靠的网格来保存此信息,并在其标题文本中显示最后一条状态消息。不过,我认为您不需要计时器。您的解决方案实际上是一个事件的模拟 - 将消息发送到 GUI,GUI 显示它然后擦除它并等待下一条消息。
标签: c# winforms multithreading