首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

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

2013-06-26 
异步调用 +返回值的问题由于方法需要重用,所以才写在一个类里!我的按钮事件调用一个类里的有返回值的方法

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

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

这个情况该咋处理?

===按钮事件===========
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的处理
}
}
);
     
}

热点排行