你通过StockSymbol属性把需要的股票编码传递给StockQuote类,并使用ChartControl属性设置图表更新。InvokeWebService()方法在循环(示例中设置为10,000)中周期性地调用上面的Web服务。由于这个类会在一个单独的线程中执行,你必须非常小心以确保自己不会自动地更新某个Windows控件,因为Windows控件并不是线程安全的(thread-safe)。作为代替,你必须使用委托并调用自己希望更新的控件上的Invoke()方法。代码每秒钟调用Web服务一次,这是由Thread.Sleep(1000)语句设置的。
为了启动线程用最新的股票信息更新图表,给"获取股票报价"按钮的点击(Click)事件增加下面的代码:
| 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 |
![]() 图6:增强的多股票窗体-此图显示了你需要添加到默认窗体上以同时显示两只股票图形的新控件。 |
| Dim t1, t2 As Thread |
| 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 |

