异步委托的应用(二) 有返回值的应用
来源:互联网 发布:python unittest 编辑:程序博客网 时间:2024/05/04 18:02
上一次我们已经简单的了解了在没有返回值的情况下使用异步委托,可是有时候,我们在异步运行完之后,要给出一个结果性的东西,这怎么办呢。这就要用到返回值了。
我想上篇中大家都看到了BeginInvoke这个方法。细心的朋友,就会想了。有了开始begin是不是应该有一个结束end啊。对,是有一个结束,这个结束就是用来返回值的。还是上篇中的例子,我们来改一下。看会有什么结果。为了不与上篇冲突,我新定义一个委托和一个方法。
//这次定义一个返回int型的委托
public delegate int getNumValue();
//这个函数与委托相对应
//这里呢。我又加了一个让你所加的值在txtInfo中进行显示
public int valueNum()
{
int j = 0;
for (int i = 1; i <= 10; i++)
{
j += i;
this.txtNum.Text = (Convert.ToInt32(this.txtNum.Text.Trim()) + i).ToString();
//这个就是在txtInfo中显示所加的值的
this.txtInfo.Text += i.ToString() + "/r/n";
Thread.Sleep(500);
}
return j;
}
下面我们来看一下,在点击按钮里,有了些什么变化
private void btnAdd_Click(object sender, EventArgs e)
{
this.txtInfo.Text = "开始计数";
getNumValue gnv = new getNumValue(valueNum);
//这里我们看,我们加入一个回调方法,里面调用了一个函数,这个其实也是一个委托new AsyncCallback,这里我们给object一个数值型的10,它最后在什么地方显示,我们一会就知道了。
gnv.BeginInvoke(new AsyncCallback(CallBackinfo), 10);
this.txtInfo.Text = "我在做别的事情哦";
}
下面我们来看一下回调函数
public void CallBackinfo(IAsyncResult ar)
{
//这里我们就把刚才BeginInvoke中的第二个参数object类型的10取出来了
int GetNum = (int)ar.AsyncState;
//这里要说明的一点的是,因为我们要进行EndInvoke接收的是一个委托方法的接收值,我们就得知道是哪个委拖的值
//而IAsyncResult是没有AsyncDelegate方面的,因为IAsyncResult是一个接口,这时候我们就要把它强制转化为AsyncResult,AsyncResult是一个方法,它是有AsyncDelegate方法的
AsyncResult a = (AsyncResult)ar;
//转化一下
getNumValue gnvs = (getNumValue)a.AsyncDelegate;
//这里我们得到返回的值,这个值是什么,就要大家猜一下了。
int Sums = (int)gnvs.EndInvoke(ar);
this.txtInfo.Text = "计数结束,结果为:" + Sums + "是" + GetNum + "个数相加";
}
运行一下,看一下结果,是不是在txtInfo中有了相应的结果
- 异步委托的应用(二) 有返回值的应用
- 异步委托的应用(一) 没有返回值的应用
- 异步委托的应用(四)代传参数的异步委托
- 异步委托的应用(五)文件对比的例子
- 多线程委托的应用
- c# 委托的应用
- 委托属性的应用。
- c# 委托的应用
- 委托的简单应用
- C#委托的应用
- Callable 有返回值的异步(Runnable 异步是没有返回值的)
- 异步委托的应用(三) 去掉Form.CheckForIllegalCrossThreadCalls = false
- 通过委托的实际应用理解委托
- 委托的原理与应用(1)
- 委托的应用(自定义控件)
- 异步任务的应用
- ajax的异步与同步以及向上层函数返回值的应用
- 委托--事件--基础以及在现在做的项目上的实际应用(二)
- F#入门-第二章 F#基础-第十四节 数组
- Js脚本文件编译进dll
- 桑拿也能蒸死人?是这样吗?~~~~
- 今天开始学习Struts2 @_@ 马上就碰到问题了..人衰么? 关于 struts2.2.1启动报javassist....错误
- Android高手进阶教程(十八)之---列出Android设备中所有启动的服务,及判断某个服务是否开启!
- 异步委托的应用(二) 有返回值的应用
- 实训心得
- 不能在堕落了
- Python入门7
- 条款07:为多态基类声明virtual析构函数(Declare destructors virtual in polymorphic base classes.)
- ubuntu桌面不显示
- nginx错误日志分析
- 网站设计中应避免的43个错误
- 比ietest 更好的浏览器调试工具 Browser Sandbox 使用教程