C# 定时器(Timer)在NX二次开发里的应用
浩强碰到一个需求,需要循环打开某个文件夹下的prt文档,然后执行某个操作后关掉。
浩强刚开始是使用了 System.Timers 这个命名空间的Timer 类
用法是这样的:
--------------------------------------------------------
Timer aTimer = new Timer(10000);
if (aTimer.Enabled)
return 0;
aTimer.Elapsed += new ElapsedEventHandler(myAction);
aTimer.Interval = 1*60*1000;//int.Parse(ini.ReadIniData("设置", "循环间隔", "10000", dataPath + "\\config.ini"));
aTimer.AutoReset = true; //执行一次 false,一直执行true
aTimer.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件
aTimer.Start();
--------------------------------------------------------
myAction() 函数就是我们每次执行的内容。
这样执行后,浩强发现myAction函数中,打开prt的内容并没有被执行,这是什么原因呢?
经过深入搜索发现,System.Timers 这个类是多线程类,而NX并不支持多线程开发,至少,在打开prt这个操作上,并不能支持多线程。
如果你后台开了10个线程,都要设置为显示部件,而UG只有一个显示部件的窗口,让他如何执行呢?
了解到这里后,浩强改用了 System.Windows.Forms.Timer 命名空间的 Timer类。
这个类是Windows.Form类的一个子类,是单线程的操作。代码如下:
--------------------------------------------------------
System.Windows.Forms.Timer bTimer = new System.Windows.Forms.Timer();
bTimer.Interval = 10000;
bTimer.Tick += delegate
{
lw.WriteLine(DateTime.Now.ToLongTimeString());
myAction();
};
bTimer.Enabled = true;
--------------------------------------------------------
这样,就完美解决了循环执行的问题,可以每隔10秒,执行一遍操作。
扫描右边的二维码,第一时间获取浩强的相关信息。