我想把List<items>传递给函数LoadHistoryAsync(List<int> Items)中的AsyncCallback,但是CallForNewData(IAsyncResult result)中的result.AsyncState是空的,为什么?
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
List<int> Items = new List<int>();
Data D = new Data();
D.LoadHistoryAsync(Items);
//D.LoadNewPointsAsync(Items);
Console.ReadKey();
}
}
public class Data
{
public void LoadHistoryAsync(List<int> Items)
{
Action<List<int>> GetHistoryInformation = new Action<List<int>>(GetHistory);
//IAsyncResult History = GetHistoryInformation.BeginInvoke(Items, null, null);
IAsyncResult History = GetHistoryInformation.BeginInvoke(Items, new AsyncCallback(CallForNewData), null);
}
public void GetHistory(List<int> Items)
{
Random rnd = new Random();
System.Threading.Thread.Sleep(rnd.Next(1,5000));
Items.Add(1);
Console.WriteLine("HistoryLoaded");
}
public void CallForNewData(IAsyncResult result)
{
Console.WriteLine("Result: {0}",result.AsyncState);
}
public void LoadNewPointsAsync(List<int> Items)
{
//while(!History.IsCompleted)
//{
System.Threading.Thread.Sleep(100);
//}
Action<List<int>> GetPointsInformation = new Action<List<int>>(GetPoints);
IAsyncResult NewPoints = GetPointsInformation.BeginInvoke(Items, null, null);
}
public void GetPoints(List<int> Items)
{
Random rnd = new Random();
System.Threading.Thread.Sleep(rnd.Next(1, 5000));
Items.Add(2);
Console.WriteLine("New data loaded");
}
}
}编辑:
IAsyncResult History = GetHistoryInformation.BeginInvoke(Items, new AsyncCallback(CallForNewData), Items);问题解决了。
发布于 2015-11-06 09:35:55
来自文档
BeginInvoke方法启动异步调用。它具有与要异步执行的方法相同的参数,外加两个额外的可选参数。第一个参数是一个AsyncCallback委托,它引用异步调用完成时要调用的方法。第二个参数是用户定义的对象,它将信息传递给回调方法。
你通过一个null,你得到一个null。
https://stackoverflow.com/questions/33563366
复制相似问题