社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 搜索
主题 : C# 定时器(Timer)在NX二次开发里的应用
kasa 离线
级别: 管理员

UID: 3
精华: 16
发帖: 1964
铜币: 3211 枚
威望: 107 点
贡献: 1542 点
银元¥: 9028 元
技术: 16 点
在线时间: 2170(时)
注册时间: 2009-08-20
最后登录: 2018-12-07
帖主  发表于: 08-05  

C# 定时器(Timer)在NX二次开发里的应用

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秒,执行一遍操作。


扫描右边的二维码,第一时间获取浩强的相关信息。




浩强工具用户群:106600057
GRIP开发群:94377814
描述
快速回复

验证问题:
1+2+3+4=? 正确答案:10
按"Ctrl+Enter"直接提交