下面通过使用 EventHandlerMethodInvoker 两种方式实现c#多线程或者线程池在子线程中调用其他窗体的控件两种委托方式。

1634541105

MethodInvoker 委托方式

 MethodInvoker 表示一个委托,该委托可以执行托管代码中声明为 void不接受任何参数 的任何方法。

 在对控件的 invoke 方法进行调用时或需要一个 简单委托 又不想自己定义时可以使用该委托。

MethodInvoker 委托方式使用示例

MethodInvoker methodInvoker;

methodInvoker=new MethodInvoker(自定义方法())

Views.Purcuase.Bill.bill.BeginInvoke(methodInvoker) //要委托给哪个窗体

EventHandler 委托方式

 EventHandlerMethodInvoker 差不多最直观的不同就是 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;

}));

1634540708

 以上就是c#通过使用 EventHandlerMethodInvoker 两种委托跨线程调用控件及方法。