我有一个名为TestClass的类
Public Class TestClass
Private _Count As Integer
Public ReadOnly Property Count() As Integer
Get
For i As Integer = 0 To 999999999
Threading.Thread.Sleep(100)
Next
Return 100
End Get
End Property
End Class
形成主要表格,我称之为课程。这是我的代码:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tg As New TestClass
MsgBox(tg.Count)
End Sub
当我从主表单中调用tg.Count
时,主表单将无法响应。如何防止我的表单没有响应。用户可以访问其他菜单而不是等待结果。任何人都可以帮助我吗?
答案 0 :(得分:2)
使用BackgroundWorker
在工作线程中运行它。这将使您的GUI响应。
http://www.dreamincode.net/forums/topic/88605-the-background-worker/
将BackgroundWorker
组件从工具箱拖到表单上。现在,将您的计数器循环放在BackgroundWorker_DoWork
事件处理程序中,该处理程序是为您自动生成的。您现在需要做的就是在其上调用RunWorkerAsync
。
希望它有所帮助!
答案 1 :(得分:0)
你的循环从0循环到999999999并且每个循环延迟100ms,这将停止当前线程。更好的解决方案是使用计时器,检查已完成的状况并在必要时重新启动计时器。这样,您的主表单线程将始终响应。