Vb.net 如何使sub-main像表单一样工作?
VB.NET。Vb.net 如何使sub-main像表单一样工作?,vb.net,multithreading,timer,main,Vb.net,Multithreading,Timer,Main,VB.NET。 试图使子主键的行为类似于窗体。从某种意义上说,它不会消耗处理器,并且Sub-Main会无限期地运行,计时器事件大约每秒触发一次 下面的代码给出了我想要的行为,但我不完全理解EventWaitHandle是如何工作的。我的问题是。。。是否有人知道这是一个好方法,或者是否有一种更简单的方法,让一个Sub-Main基本上什么都不做,只允许触发计时器事件 Imports System.Threading Module MainMod Public Sub Main(args As
试图使
子主键
的行为类似于窗体。从某种意义上说,它不会消耗处理器,并且Sub-Main
会无限期地运行,计时器事件大约每秒触发一次
下面的代码给出了我想要的行为,但我不完全理解EventWaitHandle
是如何工作的。我的问题是。。。是否有人知道这是一个好方法,或者是否有一种更简单的方法,让一个Sub-Main基本上什么都不做,只允许触发计时器事件
Imports System.Threading
Module MainMod
Public Sub Main(args As String())
Dim waitHandle = New System.Threading.EventWaitHandle(True, EventResetMode.AutoReset, "", False)
Dim timer = New Timer(AddressOf OnTimerElapsed, Nothing, TimeSpan.Zero, TimeSpan.FromSeconds(1))
Do While True
waitHandle.WaitOne(TimeSpan.FromSeconds(20))
Loop
End Sub
Private Sub OnTimerElapsed(state As Object)
Debug.WriteLine(DateAndTime.Now.ToString)
End Sub
End Module
代码中的
EventWaitHandle
实际上没有做任何特殊的事情。它只是让你无限地等待。但是,这不是EventWaitHandle
的标准用法EventWaitHandle
通常用于在不同线程之间进行同步。它允许一个线程等待另一个线程通知发生了什么
在我看来,你并不需要这个功能,你只需要等待
您只需调用控制台.ReadLine
。这将导致主线程等待,但如果用户输入一行,则会导致应用程序退出
另一种方法是使用Thread.Sleep
,这将导致主线程也等待。将其放入循环将导致主线程无限期地等待
考虑以下代码:
Public Sub Main(args As String())
Dim timer = New Timer(AddressOf OnTimerElapsed, Nothing, TimeSpan.Zero, TimeSpan.FromSeconds(1))
Do While True
Thread.Sleep(TimeSpan.FromSeconds(20))
Loop
End Sub
Private Sub OnTimerElapsed(state As Object)
Debug.WriteLine(DateAndTime.Now.ToString)
End Sub
关于代码的另一个注释是,如果第一次调用花费的时间超过1秒(计时器周期值),则使用System.Threading.Timer
类将导致第二次调用ontimerecursed
,而第一次调用未完成
这意味着计时器在发出新调用之前不会等待上一次调用完成
如果这是你想要的行为,那就好了
如果没有,则可以用一个简单的循环替换应用程序,并使用Thread.Sleep
如下所示:
Public Sub Main(args As String())
Do While True
Thread.Sleep(TimeSpan.FromSeconds(1))
OnTimerElapsed()
Loop
End Sub
Private Sub OnTimerElapsed()
Debug.WriteLine(DateAndTime.Now.ToString)
End Sub
嗯。。。什么?winforms应用程序中也存在(并且需要)main sub。它被称为。默认情况下,它是通过MyApplication类自动生成的。您始终可以创建自定义AEP并将启动窗体设置为main sub。不清楚您为什么需要这种行为。根据您希望sub执行的操作,可能还有其他方法-您是否能够发布您正在使用的代码或解释有关程序的更多信息?谢谢