возможно ли рефакторинг этого кода с использованием типа Func вместо Action?
я хотел бы избавиться от дополнительного класса (CalcParams), используемого для возврата значения с помощью обратного вызова Action.
Edit:
* Примечание: метод загрузки или Func должен быть общедоступным;
вся ваша помощь будет очень признательна.
public class CalcParams
{
public int CallID;
public int Result;
public Action<int, int> CallbackDone;
public CalcParams(int callid, Action<int, int> callback)
{
CallID = callid;
CallbackDone = callback;
}
}
public partial class MainPage : UserControl
{
int rand;
public MainPage()
{
InitializeComponent();
rand = 0;
}
public void DownloadDataInBackground(CalcParams calcparams)
{
WebClient client = new WebClient();
Uri uri = new Uri(string.Format("https://www.google.com/search?q={0}", calcparams.CallID));
client.DownloadStringCompleted += (s, e) =>
{
CalcParams localparams = (CalcParams)e.UserState;
localparams.CallbackDone(localparams.CallID, e.Result.Length);
};
client.DownloadStringAsync(uri, calcparams);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
int callid = rand++;
Debug.WriteLine("Executing CallID #{0}", callid);
DownloadDataInBackground(new CalcParams(callid, (c, r) =>
{
Debug.WriteLine("The result for the callid {0} is {1}", c, r);
}));
callid = 0;
}
}