您的位置:首页 > 编程语言 > VB

vb.net中使用多线程

2010-06-21 13:48 232 查看
在对POS机上的销售系统进行了再次修改之后,又对这个系统进行充分而有详细的考虑。主要是对健壮性方面,要考虑到所有可能出现的问题。

昨天坤哥提出了一中出错的可能,就是如果说要进行打印的话没有纸了,或者是纸不够了怎么办?

按照我们这个程序的设计来说,这时候会程序会进入等待状态,这意味着现在无法进行任何操作,如果时间过于长的话,这时候可能会导致程序意外崩溃,虽然进过测试我们的程序不会崩溃,但是如果长时间的无法操作并且也没有提示的话那是一件十分不美好的事情。

因此,这是按照逻辑应该有一个提示 “正在进行远程打印请稍等……”。但是这个提示怎么弹出来?因为开始时候没有考虑多线程,在进行打印时肯定是打印的这段代码已经独占了整个进程了,也就是无法再执行别的代码了,别的代码是指在本销售系统中的另外的代码。这时候程序将会出现假死。其他的代码段根本就得不到执行。

所以考虑使用多线程。于是乎就研究了一下多线程。下面来看实例:

新建工程如下:



然后在窗体中添加代码:

Imports System.Threading
Public Class Form1
    Dim runThread As Thread
    Dim i As Double
    Dim str As String
    Private Sub bntRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntRun.Click
        run()
    End Sub
    Private Sub run()
        While True
            str = "正在运行多线程"
            i = i + 1.345
            i = i * 1.23425
            i = i / 1.23425
            i = i - 1.345
        End While
    End Sub
    Private Sub btnThread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThread.Click
        runThread = New Thread(AddressOf run)
        runThread.Start()
        Me.Text = i.ToString
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("程序拥挤吗?现在i变成了:" + i.ToString)
    End Sub
    Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
        runThread.Abort()
        str = "线程结束"
    End Sub
    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If runThread.IsAlive Then
            runThread.Abort()
        End If
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Text = str + i.ToString
    End Sub
End Class



别的不说了,自己看代码吧,然后看一下效果:

先看单线程的:







只有关闭程序才能解决问题。

再来看多线程:





点击停止多线程,才可以停止,不然的话你关闭程序了依然会有一个线程在玩耍。这可不好玩。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: