2

非同期デリゲートを使用して関数を呼び出す必要があります。AsyncCallback のチュートリアルを進めると、非同期コールバックが次のように定義されていることがわかりました。

static void CallbackMethod(IAsyncResult result)
{
   // get the delegate that was used to call that
   // method
   CacheFlusher flusher = (CacheFlusher) result.AsyncState;

   // get the return value from that method call
   int returnValue = flusher.EndInvoke(result);

   Console.WriteLine("The result was " + returnValue);
}       

関数から参照として戻り値を取得できるかどうか教えてください。例:= 私の関数は次の形式です

void GetName(int id,ref string Name);

ここでは、参照変数を介して関数から出力を取得しています。非同期デリゲートを使用してこの関数を呼び出した場合、コールバック関数から出力を読み取るにはどうすればよいですか?

4

2 に答える 2

1

引数をオブジェクトにラップする必要があります。

class User
{
    public int Id { get; set; }

    public string Name { get; set; }
}

void GetName(IAsyncResult result)
{
    var user = (User)result.AsyncState
    // ...
}

AsyncCallback callBack = new AsyncCallback(GetName);
于 2011-07-05T12:30:55.467 に答える
0

パラメータを介して戻り値を返さないでrefください。代わりに、署名を次のように変更します。

string GetName(int id)

またはおそらく:

string GetName(int id, string defaultName) // Or whatever

「参照」と「参照渡し」には大きな違いがあることに注意してください。違いを理解することが重要です。

于 2011-07-05T12:29:00.117 に答える