Чтобы понять, как использовать IAsyncResult, вы должны понять, где он будет использоваться. Обычно он используется для асинхронного вызова. Наиболее часто используемым является аферитный вызов делегата. В этом случае IAsyncResult является квитанцией, она используется как «носитель информации» и предоставляет объект синхронизации, чтобы прервать поток при завершении асинхронной операции.
Обычно вам не нужно создавать IAsyncResult. IAsyncResult - это просто способ реализации функции получения. Вы не можете сделать это настолько сложным. Просто передайте простую структуру, чтобы нести нужные вам данные.
нравится:
/// <summary>
/// This is a simplified IAsyncResult
/// </summary>
public class Receipt
{
/// <summary>
/// Name
/// </summary>
public String Name
{
get;
set;
}
/// <summary>
/// Age
/// </summary>
public Byte Age
{
get;
set;
}
public String OperationResultText
{
get;
set;
}
}
public class Test
{
public delegate void Async_OperationCallbackHandler(Receipt r);
public void MainEntry()
{
Thread tmpThread = new Thread(()=>
{
Async_Operation("ASDF", 20, Async_Operation_Callback);
});
tmpThread.Start();
}
public void Async_Operation(String name, Byte age, Async_OperationCallbackHandler callback)
{
//Do something with "name" and "age" and get result...
String result = "OK...";
Receipt r = new Receipt()
{
Age = age,
Name = name,
OperationResultText = result
};
callback(r);
}
internal void Async_Operation_Callback(Receipt r)
{
Console.WriteLine("Name = " + r.Name + ", Age = " + r.Age + ", Operation result: " + r.OperationResultText);
}
}
Конечно, я не считал синхронизацию. Но .NET Framework взяла на себя это. Поэтому определите содержимое квитанции в соответствии с вашими потребностями, не нужно использовать IAsyncResult.
См:
Calling Synchronous Methods Asynchronously
IAsyncResult Interface
Может быть, авторы забыли включить обратный вызов: это будет параметр метода возвращения 'IAsyncResult'. – Richard