Private Sub btnGetStockQuote1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnGetStockQuote1.Click Dim sq As New StockQuote sq.StockSymbol = cmbStocks1.SelectedItem sq.ChartControl = Chart1 t1 = New Thread(AddressOf sq.InvokeWebService) t1.Start() End Sub 把调用该Web服务的代码打包为一个类的主要原因是Thread类构造函数只能接受一个ThreadStart委托(启动线程的方法的委托),不存在可以接受多个参数值的重载的Thread.Start()方法。因此,把多个参数传递到一个线程中的唯一途径是把调用的相关代码打包为一个类,接着你就可以通过这个类的参数来传递参数。
Dim t1, t2 As Thread 示例项目使用计时器控件(Timer,在工具箱中)来显示第二个线程的状态信息。把计时器拖放到窗体上,并把它的Interval属性设置为500,这使该计时器的Tick事件每半秒钟(500毫秒)调用一次。Tick事件处理程序中的代码更新了标签控件lblThreadStatus中的线程状态信息:
Private Sub Timer1_Tick(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Timer1.Tick lblThreadStatus.Text = "Thread state: " & _ t2.ThreadState.ToString End Sub 第二个图表也使用与第一个图表相同的初始化代码:
Private Sub Chart2_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Chart2.Load '在x轴上每5点显示时间 Chart2.AxisX.Step = 5 '每个点之间用5个象素分隔 Chart2.AxisX.PixPerUnit = 5 '使图表可以滚动 Chart2.Scrollable = True '打开和关闭通讯管道- Chart2.OpenData(COD.Values, 1, COD.Unknown) Chart2.CloseData(COD.Values) End Sub 你点击第二个图表的"获取股票报价"按钮的时候,代码建立一个新的线程--同时激活计时器,这样窗体才能够显示线程的状态信息: