异步调用 + 返回值的问题
由于方法需要重用,所以才写在一个类里!
我的按钮事件调用一个类里的有返回值的方法
而类里的方法由于是异步操作,得不到返回值,
放到异步方法里,我的按钮事件又无法接受到返回值.
这个情况该咋处理?
===按钮事件===========
private void b提交_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
bool zt;
zt = Rev.YDSubmit(1022,36,"评审中");
if (zt)
{
//得到返回值后座操作!!
}
}
======类里的方法===========================
public bool YDSubmit(int ID, int LCID, string auditingState)
{
InvokeOperation<string> 数据提交op = YD.Get_OneBySql("exec 数据提交 '" + ID + "','" + LCID + "','" + auditingState +"'", Callback, null);
//由于是异步,这时候得不到返回值
if (数据提交op.Value.ToString() != "")
{
ZT = true;
return ZT;
}
}
====异步方法==========================
void Callback(InvokeOperation<string> loadOperation)
{
//这里又无法做返回值,并且按钮事件也得不到该方法的返回值
if (loadOperation.Value.ToString() != "")
{
ZT = true;
}
else
{
ZT = false;
}
}
callback silverlight 异步方法 返回值
[解决办法]
办法一、微软发布了最新的silverlight 4插件支持ASync关键字得到数据之后才返回结果~~~
办法二、将委托事件作为一个返回值试试呢?例如:
public Delegate YDSubmit(int ID, int LCID, string auditingState)
{
Delegate void Callback(InvokeOperation<string> loadOperation); InvokeOperation<string> 数据提交op = YD.Get_OneBySql("exec 数据提交 '" + ID + "','" + LCID + "','" + auditingState +"'", Callback, null);
//由于是异步,这时候得不到返回值
if (数据提交op.Value.ToString() != "")
{
ZT = true;
return ZT;
}
}
然后将CallBack写在前台界面下。
[解决办法]
/*
*通过自己定义的回调函数Action<bool> callback ,在服务端返回结果的回调函数中调用callback
*/
public void YDSubmit(int ID, int LCID, string auditingState,Action<bool> callback)
{
//调用服务端Invoke函数
YD.Get_OneBySql("exec 数据提交 '" + ID + "','" + LCID + "','" + auditingState +"'",
op=>
{
if(op.HasError)
{
//处理错误信息
}
else
{
bool returnValue = false;
if(op.Value.ToString()!="")
{
returnValue = true;
}
//调用callback
callback(returnValue);
}
}
, null);
/*
*按钮事件,returnValue=>{....}这个就是传递给YDSubmit的那个 Action<bool> callback,在服务端返回结
*果的时候调用,来达到获取返回值的目的
**/
private void b提交_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
Rev.YDSubmit(1022,36,"评审中",
returnValue=>
{
if(returnValue)
{
//返回值为true的处理
}
else
{
//返回值为false的处理
}
}
);
}