~在对POS机上的销售系统进行了再次修改之后,又对这个系统进行充分而有详细的考虑。主要是对健壮性方面,要考虑到所有可能出现的问题。
昨天坤哥提出了一中出错的可能,就是如果说要进行打印的话没有纸了,或者是纸不够了怎么办?
按照我们这个程序的设计来说,这时候会程序会进入等待状态,这意味着现在无法进行任何操作,如果时间过于长的话,这时候可能会导致程序意外崩溃,虽然进过测试我们的程序不会崩溃,但是如果长时间的无法操作并且也没有提示的话那是一件十分不美好的事情。
因此,这是按照逻辑应该有一个提示 “正在进行远程打印请稍等……”。但是这个提示怎么弹出来?因为开始时候没有考虑多线程,在进行打印时肯定是打印的这段代码已经独占了整个进程了,也就是无法再执行别的代码了,别的代码是指在本销售系统中的另外的代码。这时候程序将会出现假死。其他的代码段根本就得不到执行。
所以考虑使用多线程。于是乎就研究了一下多线程。下面来看实例:
新建工程如下:
clip_image002
然后在窗体中添加代码:
[vb] view plain copy
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
别的不说了,自己看代码吧,然后看一下效果:
先看单线程的:
clip_image004
clip_image006
只有关闭程序才能解决问题。
再来看多线程:
clip_image008
clip_image010
点击停止多线程,才可以停止,不然的话你关闭程序了依然会有一个线程在玩耍。这可不好玩。