VB.NET多线程编程参数的传递以及返回值的获取

下面的例子是使用多线程同时弹出4个msgbox


————————————————

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports  System.Threading
   
Public  Class  Form1
     Structure  MyParameters
         Dim  nNum  As  Integer
     End  Structure
   
     Public  paramPM(3)  As  MyParameters
   
     Public  Function  sPM2( ByVal  paramPM  As  MyParameters)  As  String
         MessageBox.Show( "Hello"  + paramPM.nNum.ToString())
         Return  ""
     End  Function
   
   
     Private  Sub  Button1_Click( ByVal  sender  As  System. Object ByVal  As  System.EventArgs)  Handles  Button1.Click
         ThreadPool.QueueUserWorkItem( New  WaitCallback( AddressOf  sPM2), paramPM(0))
         ThreadPool.QueueUserWorkItem( New  WaitCallback( AddressOf  sPM2), paramPM(1))
         ThreadPool.QueueUserWorkItem( New  WaitCallback( AddressOf  sPM2), paramPM(2))
         ThreadPool.QueueUserWorkItem( New  WaitCallback( AddressOf  sPM2), paramPM(3))
     End  Sub
End  Class

 

 

 

 

VB.NET中多线程编程非常容易方便,只要 Dim MyThread as new system.Threading.Thread(Addressof MySub)就可以了,其中MySub是多线程中要运行的处理过程。但是如果要向线程中传递参数或者要获取线程的返回值,就不是很方便了。当然我们可以通过定义全局变量,但这会使程序的维护变得困难,增加系统开销,甚至会因线程间的并发操作导致无法预料的结果。
笔者通常采用的方法是定义一个类。在类中定义几个私有变量,用于存放参数。再定义一个带参数的构造过程,所带的参数就是我们要们要向线程中传递的参数(形参)。在构造过程中,把参数传给私有变量。再定义一个在线程中要使用的处理过程,在处理过程中就可以随意的使用私有变量来得到所需的参数。
至于返回值,可以在类中定义一个带参数的事件,在处理参数中触发事件,并把我们所需要的返回值做为参数传递出去。


在构建多线程时,先 Private WithEvents MyFirstClass as new MyClass(Arg1,Arg2....)其中Arg1,Arg2...就是我们要向线程中传递的参数(实参),然后再Dim MyThread as New System.Threading.Thread(Addressof MyFirstClass.MySub))就可以了。


在事件过程MyFirstClass_MyEvent(nReturn)中,通过nReturn就可以得到我们所要的返回值了。

 

代码示例:
1、类模块代码:
Public Class MyClass
dim MyArg1 as Integer
Dim MyArg2 as Integer

sub New(Byval Arg1 as Integer,Byval Arg2 as Integer)
MyArg1=Arg1
MyArg2=Arg2
End Sub

 

public Event MyEvent(Byval nReturn as Integer)


Public Sub MySub
Dim MyReturn as Integer=MyArg1 + MyArg2
RaiseEvent MyEvent(MyReturn)
End Sub
End Class

 

2、窗口模块代码:

Public Class From1
Private WithEvent MyFirstClass as New MyClass(1,3)


Private Sub MyFirstClass_MyEvent(Byval nReturn as Integer) Handles MyFirstClass.MyEvent

'nReturn中就是返回值

End Sub

本例为了抛砖引玉,只是向线程中传递两个整型参数1、3,然后在处理过程中简单将两个数相加,最后返回结果。在实际使用中当然要复杂的多。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值