У меня проблема с некоторым кодом, который мне нужен для рефакторинга. Прямо сейчас он использует лямбды в качестве обработчиков событий, но они не удаляются должным образом. Из того, что я прочитал, это даже невозможно? В любом случае, я хотел бы переписать его, чтобы использовать делегат вместо анонимной функции, и теперь моя проблема в том, что прямо сейчас он принимает действие в качестве параметра, и я не могу понять, как передать действие моему новому делегировать. Это код:
void RetrieveData(
int pointId,
int? chartCollectionId,
Action action)
{
if (pointId <= 0)
throw new ArgumentException("PointId not valid");
LastPointId = NextPointId;
NextPointId = pointId;
Clear();
_csr = new CustomerServiceRepository();
_csr.ServiceClient.GetChartDataCompleted += (se, ea) =>
{
_cachedCharts = ea.Result;
ChartDataRetrieved(ea.Result);
if (action != null)
action.Invoke();
_csr = null;
};
_csr.ServiceClient.GetChartDataAsync(
Settings.Current.Customer.CustomerName,
pointId,
chartCollectionId);
_csr.ServiceClient.GetChartDataCompleted -= (se, ea) => //remove after usage
{
_cachedCharts = ea.Result;
ChartDataRetrieved(ea.Result);
if (action != null)
action.Invoke();
_csr = null;
};
}
Я думал, что, возможно, смогу создать следующее:
public class extendedEventArgs : GetChartDataCompletedEventArgs
{
Action foo { get; set; }
}
void tang(object sender, extendedEventArgs e)
{
_cachedCharts = e.Result;
ChartDataRetrieved(e.Result);
if (action != null)
action.Invoke();
_csr = null;
}
И передать действие как параметр в расширенные аргументы события, но когда я пытаюсь использовать его следующим образом
_csr.ServiceClient.GetChartDataCompleted += new EventHandler<extendedEventHandler>(tang);
выдает ошибку:
Cannot implicitly convert type System.EventHandler<Conwx.Net.Client.CustomerClient.Controls.ChartControls.ChartListForecast.extendedEventArgs>' to System.EventHandler<Conwx.Net.Client.Framework.CustomerServiceReference.GetChartDataCompletedEventArgs>'
Что я здесь не так делаю? Альтернативные решения также приветствуются.
.К