【问题标题】:Newly created thread not firing until main thread finished新创建的线程在主线程完成之前不会触发
【发布时间】:2013-07-24 16:47:31
【问题描述】:

我在线程方面非常新手,我只是创建一个线程来运行一个大型函数。我创建了一个消息框,出现在程序末尾的函数末尾,告诉我加载时间。当我加载应用程序时,消息框将出现一段时间,然后线程将启动(尽管 UI 在从线程加载组件时是可导航的)不是线程能够处理多个同时发挥作用?为什么要等到主线程完成后再启动新线程?

我在应用程序的早期声明并启动新线程

【问题讨论】:

  • 你需要出示你的代码
  • 如果将消息框与启动线程的函数放在同一个函数中,则未定义是线程先启动还是显示消息框。 UI 可以正常工作,因为消息框有自己的内部事件循环。

标签: vb.net multithreading winforms


【解决方案1】:

对于应用程序命名空间中的每个表单,都会在 My 命名空间中的 Forms 属性下创建一个默认实例。

----------/ 启动主线程/------------- ----------------------

Private Sub FindCustomerLocation()
Dim Findcontractor_Thread As New Thread(AddressOf **FindContractor_ThreadExecute**)
Findcontractor_Thread.Priority = ThreadPriority.AboveNormal
Findcontractor_Thread.Start(**me**)
End Sub

------------------/ 运行线程/---------------

Private Sub **FindContractor_ThreadExecute**(beginform as *NameOfFormComingFrom*)
Dim threadControls(1) As Object
threadControls(0) = Me.XamDataGrid1
threadControls(1) = Me.WebBrowserMap

 **FindContractor_WorkingThread**(threadControls,beginform) ' ANY UI Calls back to the Main     UI Thread MUST be delegated and Invoked

End Sub

------------------/ 如何从线程设置 UI 调用 / ------------ ---------

Delegate Sub **FindContractor_WorkingThread**(s As Integer,beginform as           *NameOfFormComingFrom*)
Sub **FindContractor_WorkingThreadInvoke**(ByVal s As Integer,beginform as     *NameOfFormComingFrom*)
If beginform.mouse.InvokeRequired Then
Dim d As New FindContractor_WorkingThread(AddressOf            FindContractor_WorkingThreadInvoke)
beginform.Invoke(d, New Object() {s,beginform})
Else
 beginform.Mouse.OverrideCursor = Cursors.Wait

    'Do something...

beginform.Mouse.OverrideCursor = Nothing
 End If
End Sub

Sources from Pakks answer and Tested!

【讨论】:

    【解决方案2】:

    如果您希望它们以您的想法(同时)运行,您必须创建多个线程。查看此链接并尝试创建多个线程。这应该可以帮助您解决问题。干杯

    http://msdn.microsoft.com/en-us/library/ck8bc5c6%28v=vs.80%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多