首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

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

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

热点排行