下面通过使用 EventHandler 和 MethodInvoker 两种方式实现c#多线程或者线程池在子线程中调用其他窗体的控件两种委托方式。
MethodInvoker 委托方式
MethodInvoker 表示一个委托,该委托可以执行托管代码中声明为 void 且 不接受任何参数 的任何方法。
在对控件的 invoke 方法进行调用时或需要一个 简单委托 又不想自己定义时可以使用该委托。
MethodInvoker 委托方式使用示例
MethodInvoker methodInvoker;
methodInvoker=new MethodInvoker(自定义方法())
Views.Purcuase.Bill.bill.BeginInvoke(methodInvoker) //要委托给哪个窗体
EventHandler 委托方式
EventHandler 和 MethodInvoker 差不多最直观的不同就是 EventHandler 可以 传递参数 在 子线程 中直接使用。
EventHandler 委托方式使用示例
// 可以直接在线程方法中使用
Views.Purcuase.Bill.bill.BeginInvoke(new EventHandler(delegate {
Views.Purcuase.Bill.bill.sscb_agent.comboBox1.DataSource = worker_list.data;
Views.Purcuase.Bill.bill.sscb_agent.comboBox1.ValueMember = "worker_id";
Views.Purcuase.Bill.bill.sscb_agent.comboBox1.DisplayMember = "worker_real_name";
Views.Purcuase.Bill.bill.sscb_agent.comboBox1.DroppedDown = true;
}));
以上就是c#通过使用 EventHandler 和 MethodInvoker 两种委托跨线程调用控件及方法。