我正在使用VB.Net的項目調度程序,應用程序從Application.Run()的「Sub Main」開始,所有程序代碼都是類中的處理程序,創建並啓動在這裏,VB.Net從後臺線程更新用戶界面
Public Sub Main()
m_App = New myApp
m_App.Start()
Application.Run()
End Sub
的對myApp內部,有一個計時器來控制任務的執行,當任務完成後,我們會盡量顯示警報窗口將開始以爲每個任務的線程,如果檢測到錯誤。通過在主線程
在任務對象添加pulic事件,則AddHandler的給函數1):我們已在以顯示警告窗口(frmAlert)測試了兩種不同的方式用於執行線程和主線程之間共產
2)使用代理通知主線程
但是,警報窗口無法顯示,並且沒有錯誤報告。在使用IDE進行調試後,發現警報窗口已成功顯示,但在任務線程完成時會關閉。
下面是一個簡化的任務類,
Public Class myProcess
Public Event NotifyEvent()
Public Delegate Sub NotifyDelegate()
Private m_NotifyDelegate As NotifyDelegate
Public Sub SetNotify(ByVal NotifyDelegate As NotifyDelegate)
m_NotifyDelegate = NotifyDelegate
End Sub
Public Sub Execute()
System.Threading.Thread.Sleep(2000)
RaiseEvent NotifyEvent()
If m_NotifyDelegate IsNot Nothing Then m_NotifyDelegate()
End Sub
End Class
和主應用程序類
Imports System.Threading
Public Class myApp
Private WithEvents _Timer As New Windows.Forms.Timer
Private m_Process As New myProcess
Public Sub Start()
AddHandler m_Process.NotifyEvent, AddressOf Me.NotifyEvent
m_Process.SetNotify(AddressOf NotifyDelegate)
ProcessTasks()
End Sub
Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _Timer.Tick
ProcessTasks()
End Sub
Public Sub ProcessTasks()
_Timer.Enabled = False
'
Dim m_Thread = New Thread(AddressOf m_Process.Execute)
m_Thread.Start()
'
_Timer.Interval = 30000
_Timer.Enabled = True
End Sub
Public Sub NotifyEvent()
frmAlert.Show()
End Sub
Public Sub NotifyDelegate()
frmAlert.Show()
End Sub
End Class
結果發現通過使用NotifyEvent或該frmAlert示出(有兩個共產方法測試) NotifyDelegate,但執行完成後立即關閉。
我可以知道我們如何從執行線程彈出一個警告窗口,它可以保持在屏幕上,直到用戶關閉它爲止?
在此先感謝!
感謝您的建議,但沒有必要保持myApp.start()運行,因爲調度程序由定時器控制,沒有定時器的事件,此時應用程序不會結束。應用程序由application.run()啓動,它將繼續在內存中運行,直到我觸發Application.Exit()(它將在實際應用程序的NotifyIcon的ContextMenu中完成,此部分未在簡化中顯示上面的樣品)。 –
通過從myProcess.Execute()調用frmAlert.show()顯示警告窗口,但是當myProcess.Execute()結束時(即後臺線程完成)它關閉。即使我們讓myApp.Start()繼續運行,結果也是一樣的。 –