在另一个线程上运行一个表单

时间:2012-04-28 12:51:25

标签: vb.net multithreading thread-safety

我目前拥有的是主要形式,然后当用户按下按钮时,它会运行一些循环浏览某些文件并更改它们的函数,然后将它们复制到另一个位置,这些函数可能需要相当长的时间。我想要的是当按下按钮时它会打开另一个带有文本框的表格,当它完成时,循环的一个循环就是向文本框输出一行并告诉用户天气是否已经成功。

目前我有:

    Dim t As Threading.Thread
    t = New Threading.Thread(AddressOf Form3.Show)
    t.Start()

当该周期结束时,只需在该文本框中附加一些文字:

for each x in list
    'copy some files
    Form3.RichTextBox1.AppendText("Cycle 1 compleate")
loop

当它运行时表格只是闪烁了一段时间?

由于

1 个答案:

答案 0 :(得分:2)

您应该在UI线程上保留所有UI控件 - 包括整个Forms

您可以在后台运行文件操作,只在要附加消息时封送回UI线程。

这里BackgroundWorker class非常合适。

这里有一本优秀且免费的电子书:Albahari