5

序章

私のWP8 C#/XAML プロジェクトでは、非同期プロセスが完了したことをビューに通知するためにイベントを使用しています。

2 種類の代表者がいます。

これらのデリゲートからイベントを作成していますが、一部の操作が完了または開始されたことをビューに通知するイベントがいくつかあります (プログレスバーを表示する、別のページに移動する、いくつかのコントロールを無効にするなど)。

これらのイベントを発生させるために、これらのデリゲートを発生させるプライベートな「通知メソッド」を作成したいと考えています。

私が念頭に置いている方法は、メソッドとして以下のコードサンプルにありますfireUpEvent

コードサンプル

ReturnState 列挙型

public enum ReturnState : int
{
  state1 = 0,
  ...            //for the purpose of the presentation
  state6 = 15
  ...
}

イベントとメソッドの定義

public delegate void LoadingStartedEventHandler();
public delegate void LoadingFinishedEventHandler(ReturnState state);

public event LoadingStartedEventHandler LoadingStarted;
public event LoadingFinishedEventHandler LoadingFinished;

private void fireUpEvent(Action<ReturnState> action, Returnstate parameter)
{
  if(action != null)
  {
    action(parameter);
  }
}

private void fireUpEvent(Action action)
{
  if(action != null)
  {
    action();
  }
}

使用法

fireUpEvent(LoadingFinished, ReturnState.state1);

説明

問題は、コンパイルしようとすると、次のようなエラーが表示されることです。

Argument1: Cannot convert from 'XXXX.YYYY.SomeClass.LoadingFinishedEventHandler' to 'System.Action<XXXX.YYYY.Returnstate>'

グーグルを試しましたが、有用なものは見つかりませんでした。

なんでコンバーチブルじゃないの?

特定のデリゲートの代わりにこれらのメソッドを使用したいのですが、可能ですAction<ReturnState>か?Action

Action代わりに他の「タイプ」を使用する必要がありますか?

この「グループ」で私が知っているのはFunc&の 2 つだけActionですが、他にもありますか?

4

2 に答える 2