1
私はリファクタリングしようとしている冗長なコードを継承しました。デリゲートにデリゲート型をキャストしてEndInvokeを呼び出す
private void startThreads()
{
RunRemoteCmdDelegate runRemoteCmdDlg = new RunRemoteCmdDelegate(services.runRemoteCommand);
List<IAsyncResult> returnTags = new List<IAsyncResult>();
// asynchronously invokes the delegate multiple times
foreach (...)
{
returnTags.Add(runRemoteCmdDlg.BeginInvoke(...));
}
MonitorTasks(runRemoteCmdDlg, messages, returnTags, invokationCounter);
}
private void MonitorTasks(RunRemoteCmdDelegate theDelegate, List<IAsyncResult> returnTags)
{
foreach (IAsyncResult returnTag in returnTags) {
MessageType message = runRemoteCmdDlg.EndInvoke(returnTag);
messages.Add(message)
}
}
このコードは同じですが、すべてが異なるデリゲートタイプのクラスがたくさんあります。
私は、基本クラスにMonitorTasksメソッドを「プルアップ」したいのですが、それは、たとえば、デリゲートのすべての異なる種類で作業する必要があります。
private void MonitorTasks(Delegate theDelegate, List<IAsyncResult> returnTags)
{
foreach (IAsyncResult returnTag in returnTags) {
MessageType message = runRemoteCmdDlg.EndInvoke(returnTag); // DOESN'T COMPILE
messages.Add(message)
}
}
私は呼び出すことはできませんEndInvoke()をベースのDelegate(またはMulticastDelegate)型で使用すると、このメソッドをどのように記述できますか?私は別の方法でこれにアプローチする必要がありますか?
私はC#3.5を使用していますので、FuncやActionなどを使用する方法があり、EndInvokeを呼び出すことができますか?
ありがとうフレデリック、うまくいきます。 –