c#多线程Timer定时器设计,访问主线程控件

        假设现在我们要实现这样一个功能:我们需要让电机某轴(或几轴)循环往复运动,并每次循环获取电机运动结束位置,记录到csv文件中,每个循环结束后(即到达起点),我们要在textBox上写入循环次数。

        我们有toPoint(axis,point,velocity),waitMotorEnd(axis,timeout);getMotorPos(axis),

killMotor(axis)

 一. 第一种方法是添加一个Timer控件,设置Interval间隔,添加tick事件,在这个事件中编程和调用其他函数,用两个按钮和几个变量控制tick是否开启和关闭。

点评:这种方法简单易行,它可以访问任何控件,但是主线程已经有一个timer控件实时读取电机位置并显示出来,导致主界面在电机运动期间是卡死状态,包括最小化等界面图标均无法选中,因为这个timer控件本质上是主线程上的

二. 通过 system.Timers使用系统timer,这种方法不用在界面上拖拽控件,相应的需要在代码中设置属性。

        首先我们先考虑主循环的事件处理,然后再考虑主线程控件调用问题,因为是线程安全的,这个线程是不能直接读取主线程中的控件,需要启用委托。

代码简单如下,仔细弄明白以便在自己的代码中进行移植。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值