[英]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.