在對POS機上的銷售系統進行了再次修改之後,又對這個系統進行充分而有詳細的考慮。主要是對健壯性方面,要考慮到所有可能出現的問題。
昨天坤哥提出了一中出錯的可能,就是如果說要進行列印的話沒有紙了,或者是紙不夠了怎麼辦?
按照我們這個程式的設計來說,這時候會程式會進入等待狀態,這意味著現在無法進行任何操作,如果時間過於長的話,這時候可能會導致程式意外崩潰,雖然進過測試我們的程式不會崩潰,但是如果長時間的無法操作並且也沒有提示的話那是一件十分不美好的事情。
因此,這是按照邏輯應該有一個提示 “進行中遠程列印請稍等……”。但是這個提示怎麼彈出來?因為開始時候沒有考慮多線程,在進行列印時肯定是列印的這段代碼已經獨佔了整個進程了,也就是無法再執行別的代碼了,別的代碼是指在本銷售系統中的另外的代碼。這時候程式將會出現假死。其他的程式碼片段根本就得不到執行。
所以考慮使用多線程。於是乎就研究了一下多線程。下面來看執行個體:
建立工程如下:
然後在表單中添加代碼:
Imports System.Threading<br />Public Class Form1<br /> Dim runThread As Thread<br /> Dim i As Double<br /> Dim str As String<br /> Private Sub bntRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntRun.Click<br /> run()<br /> End Sub<br /> Private Sub run()<br /> While True<br /> str = "正在運行多線程"<br /> i = i + 1.345<br /> i = i * 1.23425<br /> i = i / 1.23425<br /> i = i - 1.345<br /> End While<br /> End Sub<br /> Private Sub btnThread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThread.Click<br /> runThread = New Thread(AddressOf run)<br /> runThread.Start()<br /> Me.Text = i.ToString<br /> End Sub</p><p> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click<br /> MsgBox("程式擁擠嗎?現在i變成了:" + i.ToString)<br /> End Sub<br /> Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click<br /> runThread.Abort()<br /> str = "線程結束"<br /> End Sub<br /> Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing<br /> If runThread.IsAlive Then<br /> runThread.Abort()<br /> End If<br /> End Sub<br /> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br /> End Sub<br /> Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick<br /> Me.Text = str + i.ToString<br /> End Sub<br />End Class<br />
別的不說了,自己看代碼吧,然後看一下效果:
先看單線程的:
只有關閉程式才能解決問題。
再來看多線程:
點擊停止多線程,才可以停止,不然的話你關閉程式了依然會有一個線程在玩耍。這可不好玩。