vb2008(.net)百分第三次跪求高手关于线程或代码分页问题!

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:10:32
问题有两个 解决任意一个问题就给分
如果没有我满意的答案就给100分给最好的答案
如果有满意答案就给两百分
环境:Visual Basic 2008

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

问题1:关于模块的线程里任意修改窗体控件的值

首先我的工程里有一个窗体Form1,里面有一个标签控件Label1
工程里还有一个模块(模块名字无所谓了)
我在模块里有这样一个过程,请注意是在模块里而不是在Form1窗体里↓
Sub a()
Form1.Label1.Text = "OK"
End Sub
这个过程十分明显的是要修改Form1里的控件Label1的文本内容为"OK"
那么我要在窗体里创建一个线程来执行上面的过程a,在窗体里的代码是↓
Control.CheckForIllegalCrossThreadCalls = False
Dim LeafThread As System.Threading.Thread
Dim LeafDelegate As System.Threading.ParameterizedThreadStart
LeafDelegate = New System.Threading.ParameterizedThreadStart(AddressOf a)
LeafThread = New System.Threading.Thread(LeafDelegate)
LeafThread.Start()
那么这个线程是无效的,因为模块里的线程无法修改控件的属性值
有什么办法使上面的过程a生效吗?

问题1补充:曾经有位仁兄教我使用把控件也传递到过程里的方法
模块里的过程↓
Sub a(ByVal LeafLabelTemp As Label)
LeafLabel

看了MSDN上的东东
正确的做法应该这样
看看这里吧
http://msdn.microsoft.com/zh-cn/library/zyzhdc6b(VS.80).aspx

Public Class MyThreadClass
Private myFormControl1 As Form1

Public Sub New(ByVal myForm As Form1)
myFormControl1 = myForm
End Sub 'New

Public Sub Run()
' Execute the specified delegate on the thread that owns
' 'myFormControl1' control's underlying window handle.
myFormControl1.Invoke(myFormControl1.LblChanged, "OK")
myFormControl1.Invoke(myFormControl1.BtnChanged, "点我呀")

End Sub 'Run

End Class

Public Class Form1
Public Delegate Sub MyChanged(ByVal Text As String)
Public LblChanged As MyChanged
Public BtnChanged As MyChanged

Private Su