主题:关于Timer的使用问题,有些事情需要请教?
waha
[专家分:0] 发布于 2006-05-20 09:02:00
VC#.Net中有两个Timer,在System.Windows.Form和System.Threading两个命名空间中都有一个Timer控件,使用System.Threading的Timer控件时,程序会创建一个新的线程,在这个新线程中,为何不能修改主窗体的TextBox中的值?应该怎样解决?
回复列表 (共2个回复)
沙发
jzyray [专家分:20610] 发布于 2006-05-20 12:24:00
不能跨线程访问Control对象。
可以写个方法和委托,来实现。
比如
private delegate void SetControlTextHandler(Control ctrl,string text);
private void SetControlText(Control ctrl,string text){
if(ctrl.InvokeRequired){
SetControlTextHandler h=new SetControlTextHandler(SetControlText);
ctrl.BeginInvoke(h,ctrl,text);
}else{
ctrl.Text=text;
}
}
有关跨线程访问的更多内容,参见msdn中的相关信息。
板凳
vfdff [专家分:740] 发布于 2008-08-17 23:25:00
// page 273
using System;
using System.Timers; // requied System.dll
//namespace ConApp5
//{
class Clock
{
static int iStringLenth;
[STAThread]
static void Main( )
{
Console.WriteLine("Press Enter to end program");
Console.WriteLine();
Timers tmr = new Timer();
tmr.Elapsed += new ElapsedEnentHandler(TimerHandler);
tmr.Interval = 1000;
tmr.Start();
Console.ReadLine();
tmr.Stop();
}
static void TimerHandler(object obj,ElapsedEventArgs eea)
{
Console.Write(new String('\b',iStringLenth));
string str = String.Format("{0} {1}",eea.SignalTime.ToLongDateString(),
eea.SignalTime.ToLongTimeString());
iStringLenth = str.Length;
Console.Write(str);
}
}
//}
那我上面的代码由什么问题
为什么一直 tmr.Elapsed += new ElapsedEnentHandler(TimerHandler); 发生错误??
我来回复