【发布时间】:2015-07-27 00:02:20
【问题描述】:
我的窗体应用程序中有两个按钮单击事件。
private void butProcess_1_Click(...)
{
/// below parameters are just sample.
Process_1(int_param1, decimal_param2, datetime_param3);
}
private void butProcess_2_Click(...)
{
/// below parameters are just sample.
Process_2(string_param1, guid_param2, byteArray_param3, bool_param4);
}
由于这些进程需要更长的时间才能完成执行,我需要向用户显示进度条。
所以我修改了名为 butProcess_1_Click 的事件。
private void butProcess_1_Click(...)
{
frmLoadingControl _frmLoadingControl = new frmLoadingControl();
_frmLoadingControl.Show(this);
BackgroundWorker _BackgroundWorker = new BackgroundWorker();
_BackgroundWorker.DoWork += (s, args) =>
{
this.Invoke(new MethodInvoker(() => this.Enabled = false));
/// below parameters are just sample.
Process_1(int_param1, decimal_param2, datetime_param3);
};
_BackgroundWorker.RunWorkerCompleted += (s, args) =>
{
_frmLoadingControl.Close();
this.Invoke(new MethodInvoker(() => this.Enabled = true));
};
_BackgroundWorker.RunWorkerAsync();
}
一切正常。但问题是 butProcess_2_Click 我需要从 butProcess_1_Click 复制所有代码。 而且我只需要更改一行来调用 process_2()。
Process_2(string_param1, guid_param2, byteArray_param3, bool_param4);
我不想复制我的代码。我想做的如下所示。
public void GenericFunction(Function _FunctionCode)
{
frmLoadingControl _frmLoadingControl = new frmLoadingControl();
_frmLoadingControl.Show(this);
BackgroundWorker _BackgroundWorker = new BackgroundWorker();
_BackgroundWorker.DoWork += (s, args) =>
{
this.Invoke(new MethodInvoker(() => this.Enabled = false));
/// below parameters are just sample.
//Process_1(int_param1, decimal_param2, datetime_param3);
//Process_2(string_param1, guid_param2, byteArray_param3, bool_param4);
Execute(_FunctionCode);
};
_BackgroundWorker.RunWorkerCompleted += (s, args) =>
{
_frmLoadingControl.Close();
this.Invoke(new MethodInvoker(() => this.Enabled = true));
};
_BackgroundWorker.RunWorkerAsync();
}
private void butProcess_1_Click(...)
{
/// below parameters are just sample.
//Process_1(int_param1, decimal_param2, datetime_param3);
GenericFunction(Process_1(int_param1, decimal_param2, datetime_param3));
}
private void butProcess_2_Click(...)
{
/// below parameters are just sample.
//Process_2(string_param1, guid_param2, byteArray_param3, bool_param4);
GenericFunction(Process_2(string_param1, guid_param2, byteArray_param3, bool_param4));
}
请告诉我你的建议。
【问题讨论】:
标签: c# delegates delegation