Delegte的BeginInvoke
BeginInvoke需要加委托才能行,否则会出错,给你段代码参考以下:
BeginInvoke 所调用的委托根本就是在 UI 线程中执行的
BeginInvoke实现了事件的异步执行,如实例:
private static int newTask(int mms) { Console.WriteLine("任务开始"); Thread.Sleep(mms); Random random = new Random(); int n = random.Next(10000); Console.WriteLine("任务完成"); return n; } private delegate int NewTaskDelegate(int mms); static void Main(string[] args) { NewTaskDelegate newTst = newTask; IAsyncResult asyncResult = newTst.BeginInvoke(2000, null, null); while (!asyncResult.IsCompleted) { Console.Write("*"); Thread.Sleep(100); } int result = newTst.EndInvoke(asyncResult); Console.WriteLine(result); }
执行效果:
*******************表示后台正在执行事件
public delegate void DCmdHandler(object s); if (servForm.IsHandleted) { servForm.BeginInvoke(new DCmdHandler(ExecuteCmd), cmd); } private void ExecuteCmd(object s) { //委托里需要干的事情 }