vb.net 线程托管 窗口假死

来源:百度知道 编辑:UC知道 时间:2024/05/17 01:02:52
不是说写了多线程之后,窗口就不会假死了吗?怎么我的还是假死啊?
过路的大侠帮忙看看:
一个窗体有两个richtextbox,创建了两个线程分别循环写这两个richtextbox
Imports System
Imports system.Threading
Public Class Form1
Delegate Sub dg(ByVal textt As String)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim th As New Thread(New ThreadStart(AddressOf method1))
th.Start()
Dim th1 As New Thread(New ThreadStart(AddressOf method2))
th1.Start()
End Sub
Public Sub method1()
Dim i As Long = 1
While (1)
settext("method 1 :" & i & vbCrLf)
i += 1
End While
End Sub
Public Sub method2()
Dim i As Long = 1
While (1)
settext1("method 2 :" & i & vbCrLf)
i += 1
End While
End Sub
Public Sub settext(ByVal

======================================
因为代码的执行速度N快 你又用If Me.RichTextBox1.InvokeRequired Then
所以 这边在执行 那边也执行 导致冲突(貌似是这样的意思 我也说不清楚)
======================================

可以用委托去完成操作 保证不假死
我刚好之前有个实验实例 你可以看看

Imports System.Threading
Public Class Form1
Delegate Sub dg(ByVal textt As String)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim t1 As New Thread(New ThreadStart(AddressOf ds1))
t1.Start()
Dim t2 As New Thread(New ThreadStart(AddressOf ds2))
t2.Start()
End Sub
Sub ds1()
For i As Integer = 0 To 3000
Me.BeginInvoke(New EventHandler(AddressOf ds11), i)
Thread.Sleep(30)
Application.DoEvents()
Next
End Sub
Sub ds11(ByVal sender As System.Object, ByVal e As System.EventArgs)
ListBox1.Items.Add(sender.ToString & Chr(6) & TextBox1.Text)
End Sub
Sub ds2()
For i As