实验要求: 
通过5个线程来异步更新窗体中5个TextBox内容 
要求任何一个线程都独立进行,并不阻塞其他线程 
更新内容是每个Text值加1. 
使用5个按钮来控制每个线程的启动及暂停. 实验目的: 
查看不同线程间的互相影响 实验控件: 
窗体:Form1 
按钮:Button1,Button2,Button3,Button4,Button5 
文本框:TextBox1,TextBox2,TextBox3,TextBox4,TextBox5 实验结果:通过任意一个按钮来开启任意一个线程,要求该其他正在运行的线程仍可以更新其对应的TextBox内容,并且任意一个线程开始时不导致其他线程的暂停.

对线程不懂啊 不知道怎么处理 并且我用的线程的暂停代码经常出现画面死掉 暂停了又启动不了了 各位大侠帮帮我 谢谢了

解决方案 »

  1.   


                    Ts.Suspend()
                    Ts.Resume()  为什么提示已经失效? 应该用什么呢?    Dim i = 0
        Dim Ts As New Threading.Thread(AddressOf Run)
        Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
            Try
                Ts.IsBackground = False
                If i = 0 Then
                    Ts.Start()
                End If
                If i Mod 2 = 1 Then
                    Ts.Suspend()
                End If
                If i Mod 2 = 0 AndAlso i <> 0 Then
                    Ts.Resume()
                End If
                i += 1
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub    Sub Run()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update))
                Loop
            Catch ex As Exception
            End Try
        End Sub
        Overloads Sub Update()
            lbl1.Text += 1
        End Sub一个我这样写不知道可以不???
      

  2.   

    我X  是vb代码吧!
    好不容易学了个叫C#的高级语言,又来个貌似叫vb的,看的眼花
      

  3.   

        Dim i = 0
        Dim Ts As New Threading.Thread(AddressOf Run)
        Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
            Try
                Ts.IsBackground = False
                If i = 0 Then
                    Ts.Start()
                End If
                If i Mod 2 = 1 Then
                    Ts.Suspend()
                End If
                If i Mod 2 = 0 AndAlso i <> 0 Then
                    Ts.Resume()
                End If
                i += 1
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub    Sub Run()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update))
                    Thread.Sleep(100)
                Loop
            Catch ex As Exception
            End Try
        End Sub
        Overloads Sub Update()
            lbl1.Text += 1
            lbl1.Refresh()
        End Sub一个我这样子基本可以实现 那5个要怎么办呢?
      

  4.   

    Dim Ts1 As New Threading.Thread(AddressOf Run1)
    Dim Ts2 As New Threading.Thread(AddressOf Run2)
    Dim Ts3 As New Threading.Thread(AddressOf Run3)
    Dim Ts4 As New Threading.Thread(AddressOf Run4)
    Dim Ts5 As New Threading.Thread(AddressOf Run5)5个
      

  5.   

    Dim Ts1 As New Threading.Thread(AddressOf Run1) 
    Dim Ts2 As New Threading.Thread(AddressOf Run2) 
    Dim Ts3 As New Threading.Thread(AddressOf Run3) 
    Dim Ts4 As New Threading.Thread(AddressOf Run4) 
    Dim Ts5 As New Threading.Thread(AddressOf Run5) 
    定义 5个线程,各自运行独立函数! 或 参数 区别
      

  6.   

     Dim y = 0 : Dim u = 0 : Dim i = 0 : Dim o = 0 : Dim p = 0 : Dim strLabel = ""
        Dim Ts1 As New Threading.Thread(AddressOf Run1)
        Dim Ts2 As New Threading.Thread(AddressOf Run2)
        Dim Ts3 As New Threading.Thread(AddressOf Run3)
        Dim Ts4 As New Threading.Thread(AddressOf Run4)
        Dim Ts5 As New Threading.Thread(AddressOf Run5)    Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click, btn2.Click, btn3.Click, btn4.Click, btn5.Click
            Try
                Select Case (sender.text.ToString())
                    Case 1
                        Ts1.IsBackground = False
                        If y = 0 Then
                            Ts1.Start()
                        End If
                        If y Mod 2 = 1 Then
                            Ts1.Suspend()
                        End If
                        If y Mod 2 = 0 AndAlso y <> 0 Then
                            Ts1.Resume()
                        End If
                        y += 1
                        strLabel = 1
                    Case 2
                        Ts2.IsBackground = False
                        If u = 0 Then
                            Ts2.Start()
                        End If
                        If u Mod 2 = 1 Then
                            Ts2.Suspend()
                        End If
                        If u Mod 2 = 0 AndAlso u <> 0 Then
                            Ts2.Resume()
                        End If
                        u += 1
                        strLabel = 2
                    Case 3
                        Ts3.IsBackground = False
                        If i = 0 Then
                            Ts3.Start()
                        End If
                        If i Mod 2 = 1 Then
                            Ts3.Suspend()
                        End If
                        If i Mod 2 = 0 AndAlso i <> 0 Then
                            Ts3.Resume()
                        End If
                        i += 1
                        strLabel = 3
                    Case 4
                        Ts4.IsBackground = False
                        If o = 0 Then
                            Ts4.Start()
                        End If
                        If o Mod 2 = 1 Then
                            Ts4.Suspend()
                        End If
                        If o Mod 2 = 0 AndAlso o <> 0 Then
                            Ts4.Resume()
                        End If
                        o += 1
                        strLabel = 4
                    Case 5
                        Ts5.IsBackground = False
                        If p = 0 Then
                            Ts5.Start()
                        End If
                        If p Mod 2 = 1 Then
                            Ts5.Suspend()
                        End If
                        If p Mod 2 = 0 AndAlso p <> 0 Then
                            Ts5.Resume()
                        End If
                        p += 1
                        strLabel = 5
                End Select        Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub    Sub Run1()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update1))
                    Thread.Sleep(100)
                Loop
            Catch ex As Exception
            End Try
        End Sub    Sub Run2()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update2))
                    Thread.Sleep(100)
                Loop
            Catch ex As Exception
            End Try
        End Sub    Sub Run3()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update3))
                    Thread.Sleep(100)
                Loop
            Catch ex As Exception
            End Try
        End Sub    Sub Run4()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update4))
                    Thread.Sleep(100)
                Loop
            Catch ex As Exception
            End Try
        End Sub    Sub Run5()
            Try
                Do
                    Invoke(New MethodInvoker(AddressOf Update5))
                    Thread.Sleep(100)
                Loop
            Catch ex As Exception
            End Try
        End Sub    Overloads Sub Update1()
            'Select Case strLabel
            '    Case 1
            lbl1.Text += 1
            lbl1.Refresh()
            '    Case 2
            'lbl2.Text += 1
            'lbl2.Refresh()
            '    Case 3
            'lbl3.Text += 1
            'lbl3.Refresh()
            '    Case 4
            'lbl4.Text += 1
            'lbl4.Refresh()
            '    Case 5
            'lbl5.Text += 1
            'lbl5.Refresh()
            'End Select
        End Sub
        Overloads Sub Update2()
            lbl2.Text += 1
            lbl2.Refresh()
        End Sub
        Overloads Sub Update3()
            lbl3.Text += 1
            lbl3.Refresh()
        End Sub
        Overloads Sub Update4()
            lbl4.Text += 1
            lbl4.Refresh()
        End Sub
        Overloads Sub Update5()
            lbl5.Text += 1
            lbl5.Refresh()
        End Sub
    这样可以实现 但是不是太复杂了??? 能用到什么线程池?进程之类的不?我可以先出来一个的所以说我是想简化他很简单的代码实现?求高手帮忙 对这方面还是不太懂! 谢谢大家了 上面的主意谢谢大家了
      

  7.   

    Ts.Suspend() 和 Ts.Resume()两个函数微软打算把它们去掉,也就是可能以后的版本中不会有这两个函数啦。不过现在还是可以用的。其它的可以用sleep,不过它是一个固定时间的值。