异步委托的应用(四)代传参数的异步委托
来源:互联网 发布:qq农场捕鱼枪升级数据 编辑:程序博客网 时间:2024/05/15 01:53
还记得上节中我们留下的那个问题吗?就是在记数的时候,我们不是从1加到10了而中一直在加1,这就与我们的需求不符合了。这怎么呢。我们通过程序可以看到要想做到从1加到10,那么我们必须要把每次循环的的数传进相对应的函数中才行。这要怎么呢。
第一节中我说过了。委托就像我们定义一个函数一个,区别就在前面多了一个delegate,我们只要在定义它时给他定义一个传值就行了。
好了,我们在以前的程序上改动一下就行。
第一步,我们要修改一下委托
//代参数的委托,主要用来在计数框中显示值
public delegate void txtGetNums(int i);
这里我们定义了一个 int i它就是用来传值的
第二步,修改与委托对应的函数(还记得我说过的吗。每个委托都会有一个与其的函数)
/// <summary>
/// 用来显示txtNums里的值的
/// </summary>
/// <param name="i"></param>
public void txtNums(int i)
{
this.txtNum.Text = (Convert.ToInt32(this.txtNum.Text.Trim()) + i).ToString();
}
第三步,修改调用此委托的方法
/// <summary>
/// 无返回值调用方法,用来计数,这里我用了一个Thread.sleep(500)这个大家都应该明白是什么意思,就是让它暂停半秒钟
/// 只有这样,我们才能看到它的变化。
/// </summary>
public void GetNum()
{
for (int i = 1; i <= 10; i++)
{
this.txtNum.BeginInvoke(new txtGetNums(txtNums),i);
Thread.Sleep(500);
}
}
注意我用红色标出的部分。BeginInvoke方面第二个参数是一个object[]类型的.作为给定方法的参数传递的对象数组。如果不需要参数,则可以为 空引用
这里要注意一点是什么,这个值是一个数组,它是与委托定义的值是相对应的,因为咱们只定义了一个int i,所以你在这里只要给值一个i就完了。如果你定义了二个怎么办呢。
下面是MSDN上给出的例子,我认为对理解这个很有帮助。
在按钮事件中我们不用动,还是原来的代码
private void btnAdd_Click(object sender, EventArgs e)
{
this.txtInfo.Text = "开始计数";
//这里初始化一下委托,这里要说明的是,委托中调用的函数不用加()只要一个名字就行了。
getNums gn = new getNums(GetNum);
//因为我们没有任何的返回值,所以BeginInvoke里面就是给null
gn.BeginInvoke(null, null);
this.txtInfo.Text = "我正在计数";
}
试一下,是不是和我们的要求一样呢。呵呵。。。。。。这里留一个问题,你可以试着,在txtInfo中把每次加的数据都显示出来,看一下这个怎么处理。
下面给出完整的代码
- 异步委托的应用(四)代传参数的异步委托
- 异步委托的用法
- 异步委托的使用
- 异步委托的应用(五)文件对比的例子
- c#异步委托委托的使用
- 线程、委托的异步调用
- C#委托的异步使用
- C#异步委托的用法
- 等待异步委托的方式
- C#委托的异步使用
- C#委托的异步调用
- C#委托的异步调用
- C#异步委托的使用
- C#委托的异步调用
- c#委托的异步调用
- C#委托的异步调用
- 委托的异步回调
- C#委托的异步调用
- 收藏《JS 事件类型及属性》
- PHP 程序员的调试技术
- ms sql server分页sql语句
- C库源代码实现: C/C++中的Split函数strtok
- 自己写的简易多任务系统---基于pic18fxxx
- 异步委托的应用(四)代传参数的异步委托
- 在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页
- 一些方法的链接地址
- vi/vim鼠标中键粘贴不缩进的方法
- strlen,strcpy_s
- 本人履历
- 弹出窗口并传值
- VC访问IE浏览器中的某个控件
- 【转载】曾经的那些