C# 线程中访问statusStrip控件的问题。
在程序中,单独创建一个线程,每秒更新statusStrip1中某一个label的文字,比如:
statusStrip1.toolStripStatusLabel1.Text="现在时间:" + System.DateTime.Now.Date.ToString();
使用中发现一个问题:其它windows控件,在线程中访问时一定要使用Invoke,否则会出错,
但statusStrip1控件却没有Invoke方法,只能使用上面直接访问的方法,
但我测试程序发现偶尔会出现状态栏statusStrip1花掉(打一个X,也不出catch到错误),不能正常显示时间。
请教各位,该怎么弄才不会出错? c# statusStrip --------------------编程问答-------------------- 不一定非得调该控件的Invoke方法,在UI线程的类的Invoke都可以,比如你可以调用Form的Invoke。 --------------------编程问答--------------------
private delegate void ShowTimeHandler();--------------------编程问答--------------------
private void Form1_Load(object sender, EventArgs e)
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ShowTime));
t.Start();
}
private void ShowTime()
{
ShowTimeHandler s = new ShowTimeHandler(ShowTimeFunc);
this.BeginInvoke(s);
}
private void ShowTimeFunc()
{
while (true)
{
// statusStrip1.toolStripStatusLabel1.Text = "现在时间:" + System.DateTime.Now.Date.ToString();
try
{
statusStrip1.Items[0].Text = "现在时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
System.Threading.Thread.Sleep(1000);
Application.DoEvents();
}
catch
{
}
}
}
感谢要上二位,我用gxingmin的代码测试,界面非常卡,甚至无法操作了。 --------------------编程问答--------------------
this.BeginInvoke(s) //这句造成界面卡死。 --------------------编程问答--------------------
其实你完全没必要用线程,用timer控件就可以了,设置Interval为1000
我的代码我测试了,界面不卡
windows7+vs2012 --------------------编程问答--------------------
说得没得错,我开始确实是用timer的,只是后面不光每秒更新日期,还有其它计算或显示的部份,才单独开了线程,没想到会偶尔出错(机率低,运行24小时可能出一次)。
感谢:) --------------------编程问答--------------------
this.BeginInvoke(s);不是在UI上面执行吗?委托下一个while(true)的循环,这样界面会卡吧?
补充:.NET技术 , C#