簡體   English   中英

作為方法參數傳遞的AsyncCallBack

[英]AsyncCallBack passed as a method parameter

我試圖像這樣從Class1傳遞方法作為AsyncCallBack參數到Class2

public class Class1
{
    public void MyTestCallBack()
    {
        Class2 c2 = new Class2();
        c2.TestCallbackAPM(MyCallBack);//How can i pass MyCallBack method as parameter and use it in class2 as AsyncCallBack?
    }
    public void MyCallBack(IAsyncResult result)
    {
         //....     
    }

}

public class Class2
{   
     public void TestCallbackAPM(/*MyCallBackMethod*/ CompleteRead)//How can i pass MyCallBack method as parameter and use it in class2 as AsyncCallBack?
     {
        string filename = System.IO.Path.Combine (System.Environment.CurrentDirectory, "mfc71.pdb");

        FileStream strm = new FileStream(filename,
        FileMode.Open, FileAccess.Read, FileShare.Read, 1024,
        FileOptions.Asynchronous);

        // Make the asynchronous call
        IAsyncResult result = strm.BeginRead(buffer, 0, buffer.Length,
        new AsyncCallback(CompleteRead), strm);
     }
}

如何將MyCallBack作為參數從Class1傳遞到Class2

一種可能是使用預定義的委托Action<T>

封裝具有單個參數且不返回值的方法。

在您的情況下,請使用Action<IAsyncResult> callbackMethod作為方法的參數-它與完全void MyCallBack(IAsyncResult result)匹配:

public class Class2
{   
     public void TestCallbackAPM(Action<IAsyncResult> CompleteRead)
     {
     }
}

如果您不想使用預定義的Action委托,請創建自己的:

public delegate void MyCallBackMethod(IAsyncResult result);

用法是相同的:

public class Class2
{   
     public void TestCallbackAPM(MyCallBackMethod CompleteRead)
     {
     }
}

如果要傳遞返回值的方法,則可以使用預定義的Func<T, TResult>委托。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM