读书人

异步调用 + 返回值的有关问题

发布时间: 2013-06-26 14:29:32 作者: rapoo

异步调用 + 返回值的问题
由于方法需要重用,所以才写在一个类里!

我的按钮事件调用一个类里的有返回值的方法
而类里的方法由于是异步操作,得不到返回值,
放到异步方法里,我的按钮事件又无法接受到返回值.

这个情况该咋处理?

===按钮事件===========
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写在前台界面下。
[解决办法]

引用:
Quote: 引用:

C# code?12345678910111213141516public bool YDSubmit(int ID, int LCID, string auditingState,Action<bool> callback){ YD.Get_OneBySql("exec 数据提交 '" + ID + "','" + LCID + "','" + auditingS……



bool returnValue = false;
public bool YDSubmit(int ID, int LCID, string auditingState,Action<bool> callback)


{
YD.Get_OneBySql("exec 数据提交 '" + ID + "','" + LCID + "','" + auditingState +"'",
op=>
{
if(!op.HasError)
{
if(op.Value.ToString()!="")
{
returnValue = true;
}
callback(returnValue);
}
}
, null);

//这个位置如果不写,会提示不是每个路径都有返回值;
return returnValue;



ji_yi_m 你好,感谢您的回复,
我试了一下你的方法,发现如果类方法里不写' return returnValue;' 会提示无返回值.
但是写了以后,还是没有执行完数据访问,就已经返回了false

我应该在什么地方返回returnValue?

还有callback(bool returnValue) 方法 如果按照您的这种处理方法 应该是什么内容?
我尝试这再callback 里写return 是不行的!



不好意思,因为是复制后改的,疏忽了~~
这里的 public bool YDSubmit 应该是 public void YDSubmit(.....)



/*
*通过自己定义的回调函数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的处理
}
}
);

}

读书人网 >CAD教程

热点推荐