假設我們有兩個表單:MainForm
和WaitingForm
。我想從MainForm
傳遞給WaitingForm
使用BackgroundWorker
在後臺運行的方法。現在在第二個表單上使用BackgroundWorker運行方法
,我做這樣的事情:
MainForm.cs
:
public partial class MainForm: Form
{
private void btnImport_Click(object sender, EventArgs e)
{
var waitingFrm = new WaitingForm();
waitingFrm.DoWork = (o, args) => this.LongRunningOperation(this, new DoWorkEventArgs("foo bar"));
waitingFrm.OnWorkCompleted = (o, args) => MessageBox.Show("Finished!");
waitingFrm.Show();
waitingFrm.Run(); // should execute LongRunningOperation, method below.
}
private void LongRunningOperation(object sender, DoWorkEventArgs e)
{
MessageBox.Show("Running long operation!....");
// some long running stuff here;
}
}
WaitingForm.cs
public partial class WaitingForm: Form
{
private BackgroundWorker worker = new BackgroundWorker();
public DoWorkEventHandler DoWork { get; set; }
public RunWorkerCompletedEventHandler OnWorkCompleted { get; set; }
public WaitingForm()
{
this.worker.DoWork += DoWork;
this.worker.RunWorkerCompleted += OnWorkCompleted;
InitializeComponent();
}
public void Run()
{
this.worker.RunWorkerAsync();
}
}
但waitingFrm.Run();
後,我的不執行LongRunningOperation
。
在WaitingForm的InitializeComponent(),這樣做,而不是在MainForm的這樣嗎? – R0MANARMY 2012-04-07 13:43:30
Becaues我想重用WaitingForm以便在後臺運行其他的東西。 – Dariusz 2012-04-07 13:45:24
WaitingForm - Windows服務? – 2012-04-07 13:49:06