【发布时间】:2013-07-25 19:44:03
【问题描述】:
这是一个名为“Blahing”的模块内的子代码:
Sub BlahBlah(ByVal Count As Long)
For i As Long = 0 To Count
frmBlaher.txtBlah.Appendtext("Blah")
Next
End Sub
这是一个名为 frmBlaher 的表单内的按钮单击事件代码:
Private Sub WriteBlah_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles WriteBlah.Click
Dim Thread As New Threading.Thread(Sub() Blahing.BlahBlah(Val(_
TxtBlahCount.Text)))
Thread.Start()
End Sub
当我在 txtBlahCount 中输入任何数字(例如 10)然后按下 WriteBlah 按钮时,什么也没有发生。我设置了多个断点,我发现“Appendtext”部分出现但不起作用。我检查了 txtBlah 的 Text_Changed 事件,它发生了,但唯一的问题是,我在 txtBlah 中看不到任何文本。我是多线程的新手。我之前读过很多关于这个问题的答案,但没有一个给出一个例子。你能帮忙吗?
【问题讨论】:
-
为了编辑主线程中的控件,您需要首先研究委托和控件的调用。基本上你不能改变主线程上的任何东西,从不同的线程,而不首先检查
InvokeRequired并在需要时调用控件。我无法发布任何代码,因为我在手机上。但是谷歌搜索调用控件线程安全,你应该找到你要找的东西:) -
对不起,我不太明白,我只能等待任何代码示例
-
看看BackgroundWorker。围绕它的大量示例比这更有用。 UI 控件在主线程中,如果你想从其他线程更新它们,你必须跳过几个环节。
-
你很幸运,它什么也没做。从主 UI 线程以外的线程访问控件可能会导致许多不可预知的问题,包括在时空中撕裂一个洞。