我想在backgroundworker進程上做一些工作,並在工作完成時我要顯示一個模態對話框。我已經得到了一個簡單的Action委託很好的代碼,但希望能夠傳遞一個Func委託並獲得返回類型。 我至今是一個方法Compact Framework Func <T>問題
public void ShowDialogWhile(Action work)
{
_work = work;
_worker.RunWorkerAsync();
this.CenterForm();
this.ShowDialog();
}
一個形式。我想獲得下一個工作是什麼樣的東西
public TResult ShowDialogWhile<TResult>(Func<TResult> work)
{
_workWithReturn = work;
_worker.RunWorkerAsync();
this.CenterForm();
this.ShowDialog();
return (TResult)Result;
}
我沒有任何運氣,到目前爲止,因爲我一直在當宣佈我的工作類型_workWithReturn時摔倒
Func<TResult> _workWithReturn;
有沒有人有任何想法?
這裏是完整的代碼。
public partial class AsyncWaitDialog : Form, IAsyncDialog
{
BackgroundWorker _worker = new BackgroundWorker();
Action _work;
Func<TResult> _workWithReturn;
public object Result { get; private set; }
public AsyncWaitDialog()
{
InitializeComponent();
_worker.DoWork += HandleDoWorkEvent;
_worker.RunWorkerCompleted += HandleWorkerCompleted;
}
public void ShowDialogWhile(Action work)
{
_work = work;
_worker.RunWorkerAsync();
this.CenterForm();
this.ShowDialog();
}
public TResult ShowDialogWhile<TResult>(Func<TResult> work)
{
_workWithReturn = work;
_worker.RunWorkerAsync();
this.CenterForm();
this.ShowDialog();
return (TResult)Result;
}
private void HandleDoWorkEvent(object sender, EventArgs e)
{
try
{
if (_work != null)
{
_work();
}
if (_workWithReturn != null)
{
Result = _workWithReturn();
}
}
catch (Exception)
{
this.Close();
throw;
}
}
private void HandleWorkerCompleted(object sender, EventArgs e)
{
this.Close();
}
}
你說你繼續「摔倒」 - 到底發生了什麼? – 2011-06-16 18:26:48
我收到以下編譯錯誤:無法找到類型或命名空間名稱'TResult'(缺少使用指令或程序集引用嗎?) – Andrew 2011-06-16 18:31:20
TResult定義在哪裏?它被定義爲什麼?你能展示那段代碼嗎? – 2011-06-16 18:31:32