リファクタリングする必要があるコードに問題があります。今はlambdaをイベントハンドラとして使用していますが、適切に削除されません。私が読んだことから、これは可能でもありませんか?とにかく、無名関数の代わりに代理人を使用するように書き直したいのですが、今は問題はそれがパラメータとしてアクションを取ることです。私の新しい問題にアクションを渡す方法を理解できないようですデリゲート。これはコードです:イベントハンドラの引数にアクションを追加するC#
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;
}
と拡張イベント引数にパラメータとしてアクションを渡すが、私は使用しようとすると:
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;
};
}
私は多分、私は次のように作成することができると考えていましたそれがこの
_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>'
私はここで何が間違っていますか?代替のソリューションも歓迎します。
.K
これは有望に見える、ありがとう! – Keller