命名空间:thread.asynOperation
功能:异步执行函数
功能详细说明:
在执行多个轴同时回原点时,你需要的是多个轴并行回原点,而不是一个个排队回原点。
你当然可以使用线程去实现,但是比较麻烦,不推荐这样做。
勇哥推荐的是使用asynOperation类来异步执行回原点函数。
这个类的功能需要你并行运行的函数确保一定是可以正常执行完成,而且你不需要中途停止的场合。
缺点:
这个类使用Begininvoke实现异步操作,它的缺点是当并行处理的函数没有执行完毕前是不能提前强制结束的。所以不要把asynOperation类用于机器动作逻辑中去,那样你会发现当需要这个动作复位时,你却无法做到让这个并行处理线程结束掉。
常用函数列表:
由函数列表可知,要异步执行的函数必须是无参的有一个返回bool值的函数。
如果你要传入参数,可以通过把你的工作函数二次封装成一个不带参函数的办法间接实现。
//压入函数到并行处理列表,注意压入的函数必须是无参数,并且只有一个bool返回值 public void FuncListAdd(Func<bool> action) //异步执行并行函数列表中的函数,其返回值表示是否成功执行了列表中的全部函数。 public bool AsynFunList() //异步执行一个函数 public bool AsynFun(Func<bool> action)
参考例子:
using netMarketing.thread; using sharClass; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace asynOperationTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnEnter_Click(object sender, EventArgs e) { var ao = new asynOperation(); ao.FuncListAdd(fun1); ao.FuncListAdd(fun2); var f1 = ao.AsynFunList(); this.rtbmsg.AppendText(Environment.NewLine+ f1.ToString()); } private bool fun1() { uiHelper.SetTextString(this.rtbmsg, $"{DateTime.Now.ToString()}: 线程1{Environment.NewLine}",Color.Red); return true; } private bool fun2() { uiHelper.SetTextString(this.rtbmsg, $"{DateTime.Now.ToString()}: 线程2{Environment.NewLine}", Color.Green); return true; } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { new asynOperation().AsynFun(fun1); } } }
点击“异步列表”按钮后,把函数fun1,fun2推入异步列表然后同步执行。
点击“单个异步”按钮后,把一个函数fun1进行异步执行。
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

