读书人

vb.net 2005 多线程实现!呀!哥们,该如

发布时间: 2012-01-14 20:02:35 作者: rapoo

vb.net 2005 多线程实现!急呀!哥们
怎么实现点击一个按钮实现线程,且不影响其它控件使用.另一个按钮实现停止线程

Private Sub btFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btFind.Click
Dim ForNum As Integer
Dim Num As Integer
Dim medicineno As String
If cbLabelNo.Text <> " " Then
medicineno = Trim(cbLabelNo.Text)
Else
MessageBox.Show(Me, "请选择货号! ", "错 误 ")
Exit Sub
End If
If IsNumeric(txNum.Text) And txNum.Text <> " " Then
Num = CInt(Trim(txNum.Text))
Else
MessageBox.Show(Me, "请在数量输入数字! ", "错 误 ")
Exit Sub
End If

Dim al As ArrayList = AccessDBOp.GetAllMedicineNo(medicineno)
'查找重复FrWriteLabel and FrSale

For j As Integer = 0 To lvMedicineNo.Items.Count - 1
For k As Integer = 0 To al.Count - 1
If lvMedicineNo.Items(j).SubItems(1).Text = al(k).ToString Then
MessageBox.Show(Me, "已经添加过数据,还未进行操作,操作后再继续! ", "提 示 ")
Exit Sub
End If
Next
Next
'不重复继续
If al.Count > = Num Then


ForNum = Num
Else
'ForNum = al.Count
MessageBox.Show(Me, "产品标签号不足!数据库中只有! " & al.Count & "个标签号! ", "错 误 ")
Exit Sub
End If
For i As Integer = 0 To ForNum - 1
Dim item As New ListViewItem((i + 1).ToString)
item.SubItems.Add(al(i).ToString())
item.SubItems.Add(Replace(Microsoft.VisualBasic.Left(al(i).ToString, 12), "& ", " "))
lvMedicineNo.Items.Add(item)
Next

End Sub

Private Sub btWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btWrite.Click

If lvMedicineNo.Items.Count <= 0 Then
MessageBox.Show(Me, "没有选号! ", "错 误 ")
Exit Sub
End If

Try

If Label IsNot Nothing Then
Label.CloseCom()
End If
Label = New CardWriter
Label.Ini(Config.GetWriteCardPort)

isWrite = True
btWrite.Enabled = False
t = New Threading.Thread(New Threading.ThreadStart(AddressOf Me.WriteSub))
t.Priority = ThreadPriority.Normal


t.Start()
Catch ex As Exception
isWrite = False
btWrite.Enabled = True
MessageBox.Show(Me, ex.Message, "错 误 ")
End Try
End Sub

Private Sub WriteSub()
Dim miWrite As MethodInvoker = New MethodInvoker(AddressOf Write)
BeginInvoke(miWrite)
'Me.Invoke(miWrite)
End Sub


Private Sub Write()
While (isWrite)
Try
If Label.Write(Trim(Me.lvMedicineNo.Items(0).SubItems(1).Text).ToString, CardWriter.CardType.MedicineLabel) Then
'LvCurretnIn.Items.Add(MedicineNo)
lvMedicineNo.Items.RemoveAt(0)
txFlow.Text = "写入成功! "
If Me.lvMedicineNo.Items.Count <= 0 Then
MessageBox.Show(Me, "商品标签号写完! ", "错 误 ")
btWrite.Enabled = True
isWrite = False
End If
System.Threading.Thread.Sleep(1500)
Else
txFlow.Text = "写入失败! "


System.Threading.Thread.Sleep(1500)
End If
'Next
'System.Threading.Thread.Sleep(1500)
Catch ex As Exception
stopWriteSub()
MessageBox.Show(Me, ex.Message, "错误 ")
End Try
End While
End Sub

Private Sub stopWriteSub()
Dim miWrite As MethodInvoker = New MethodInvoker(AddressOf StopWrite)
BeginInvoke(miWrite)
End Sub

Private Sub StopWrite()
t.Abort()
isWrite = False
btWrite.Enabled = True
Label.CloseCom()
End Sub

Private Sub btStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btStop.Click
stopWriteSub()
End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim MedicineNo As String = Trim(lvMedicineNo.Items(0).SubItems(1).Text)
txFlow.Text = MedicineNo
End Sub
End Class

[解决办法]
Imports System.Threading

Public Class Cls_ChatClient
'聊天线程
Private ChatClientThread As Thread

Public Sub New(ByVal iServerEP As IPEndPoint, ByVal iClientName As String, ByVal iGetPortInfo As Object)

'创建服务器端线程
ChatClientThread = New Thread(AddressOf ReceiveProc)
ChatClientThread.Start()
End Sub

'消息处理
Private Sub ReceiveProc()
Dim ReceiveMessage As String = " "
Dim outstr As String
Try
Do
ReceiveBuf = ChatClient.Receive(ServerEP)


ReceiveMessage = Encoding.Unicode.GetString(ReceiveBuf, 0, ReceiveBuf.Length)
.......................................................................
Thread.Sleep(50)
RaiseEvent ReceiveMessage(outstr.ToString)
Loop
Catch ex As Exception
End Try
End Sub

'关闭连接
Public Sub Close()
Try
ChatClient.Close()
ChatClientThread.Abort()
Catch ex As Exception
End Try
End Sub

End Class

[解决办法]
界面三个button,一个listbox,线程启动、停止,线程运行时不影响其他按钮的事件:

Private Test As Boolean

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
MsgBox( "Test,Hello! ")
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim TestThread As Threading.Thread = New Threading.Thread(AddressOf TestSub)
TestThread.Start()
End Sub

Private Sub TestSub()
Do Until Test
ListBox1.Invoke(New RunMySub(AddressOf Run))
Threading.Thread.Sleep(100)
Loop
Test = False
End Sub

Private Delegate Sub RunMySub()

Private Sub Run()
ListBox1.Items.Add(Now.ToString)
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Test = True
End Sub

读书人网 >VB Dotnet

热点推荐