Reference:
http://www.cnblogs.com/c2303191/articles/826571.html
MethodInvoker 提供一个简单委托,该委托用于调用含 void 参数列表的方法。在对控件的
Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托(摘自MSDN)
在多线程编程时,DotNet2.0会对跨线程访问控件进行限制的,说是为了线程安全。
MSDN提供一种声明委托的例子,使用MethodInvoker可以不用声明的
Eg1:
private void MutiThreadTest()
{
}
private void CommonInvoker()
{
}
Eg2:
public void DataUpdatedHandler(Sensor sensor, SensorDataReport newData)
{
if (this.InvokeRequired)
{
BeginInvoke(new MethodInvoker(delegate() { DataUpdatedHandler(sensor, newData); }));
}
else
{
Guid guidSensor = sensor.SensorID;
if (null != treeViewSensors.SelectedNode)
{
// Refresh grids and show log if this sensor is selected
if (guidSensor.ToString() == treeViewSensors.SelectedNode.Name)
{
if (showEventsToolStripMenuItem.Checked)
{
RefreshGrids(treeViewSensors.SelectedNode);
DisplayEventString(String.Format(
CultureInfo.CurrentUICulture,
m_resourceManager.GetString("DataUpdatedEventUI"),
m_sensorDictionary[guidSensor].FriendlyName));
}
}
}
// Log event
if (m_sensorDictionary.ContainsKey(guidSensor))
{
m_sensorDictionary[guidSensor].LogReport(newData);
}
}
}