WPF异步回调时回调函数如何获取异步函数产生的变量
2021-07-10 05:11
标签:比较 student 需要 定义 ref ... 判断 开始 pat 有这么一个问题,WPF在使用异步回调的时候,回调函数需要用到异步函数里产生的一个变量,例如异步函数里查询数据库得到了一个DataTable,如何传递给回调函数呢? 很容易想到的是用全局变量,这也是最简单的办法。但是如果我想循环调用呢,例如回调函数判断异步函数执行完之后的DataTable有没有数据,有数据则继续异步(BeginInvoke),这时候如果使用全局变量可能会出现意外情况,因为是循环调用,回调函数使用的DataTable是不是你想要的那个值就比较难说了。 这也是一个比较常规的办法,闭包的话就方便内部变量传递了,写法如下: 那么,能不能不使用全局变量呢? 使用带返回值的委托,这样在委托EndInvoke的时候就可以获得委托的返回值了,代码看起来是这样的: WPF异步回调时回调函数如何获取异步函数产生的变量 标签:比较 student 需要 定义 ref ... 判断 开始 pat 原文地址:https://www.cnblogs.com/lonelyxmas/p/9688573.html【方案一】使用全局变量
【方案二】闭包
private void QueryDateBase()
{
DataTable dtTarget = new DataTable();//共享变量
Action handler = delegate()//异步匿名委托
{
dtTarget = XXX查询数据库;
};
AsyncCallback functionCallBack = delegate(IAsyncResult asyResult)//回调匿名委托
{
handler.EndInvoke(asyResult);
if (dtTarget.Rows.Count > 0)
{
QueryDateBase();
}
};
handler.BeginInvoke(functionCallBack, null);
}
【方案三】使用返回值
public class Student
{
public Func