Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net ';听一听';在线程睡眠时按键_Vb.net - Fatal编程技术网

Vb.net ';听一听';在线程睡眠时按键

Vb.net ';听一听';在线程睡眠时按键,vb.net,Vb.net,有没有办法在屏幕上没有UI的情况下实现这一点?目前,我有这个小的非UI程序,每60秒从一个3270主机到一个文本文件读写信息,假设用户想在60秒的等待中取消,我怎么能在没有任何UI事件的情况下监听按键?你需要一些接口来捕获击键。 下面是在控制台应用程序中运行的示例(创建一个空白应用程序并粘贴到defauklt模块中) 它允许在后台线程中处理“某物”,同时让GUI空闲,以便用户输入命令。在这种情况下,只需将一个简单的1秒延迟计数器设置为1000 选项比较文本 Module Module1 Sub

有没有办法在屏幕上没有UI的情况下实现这一点?目前,我有这个小的非UI程序,每60秒从一个3270主机到一个文本文件读写信息,假设用户想在60秒的等待中取消,我怎么能在没有任何UI事件的情况下监听按键?你需要一些接口来捕获击键。 下面是在控制台应用程序中运行的示例(创建一个空白应用程序并粘贴到defauklt模块中)

它允许在后台线程中处理“某物”,同时让GUI空闲,以便用户输入命令。在这种情况下,只需将一个简单的1秒延迟计数器设置为1000

选项比较文本

Module Module1

Sub Main()
    Console.WriteLine("Enter ""Start"", ""Stop"", or ""Exit"".")
    Do
        Dim Com As String = Console.ReadLine
        Select Case Com
            Case "Start"
                Console.WriteLine(StartWork)
            Case "Stop"
                Console.WriteLine(StopWork)
            Case "Exit"
                Console.WriteLine("Quiting on completion")
                Exit Do
            Case Else
                Console.WriteLine("bad command Enter ""Start"", ""Stop"", or ""Exit"".")
        End Select
    Loop
End Sub

Public Function StartWork() As String
    If ThWork Is Nothing Then
        ThWork = New Threading.Thread(AddressOf Thread_Work)
        ThWork.IsBackground = False  'prevents killing the work if the user closes the window.
        CancelWork = False
        ThWork.Start()
        Return "Started Work"
    Else
        Return "Work Already Processing"
    End If
End Function

Public Function StopWork() As String
    CancelWork = True
    If ThWork Is Nothing Then
        Return "Work not currently running"
    Else
        Return "Sent Stop Request"
    End If
End Function

Public CancelWork As Boolean = False
Public ThWork As Threading.Thread = Nothing
Public dummyCounter As Integer = 0

Public Sub Thread_Work()
    Try
        Do
            dummyCounter += 1
            Console.Title = "Working ... #" & dummyCounter
            ' ###############
            ' do a SMALL PART OF YOUR WORK here to allow escape...
            ' ###############
            If dummyCounter >= 1000 Then
                Console.Title = "Work Done at #" & dummyCounter
                Exit Do
            ElseIf CancelWork Then
                Exit Do
            End If
            Threading.Thread.Sleep(1000) ' demo usage only.
        Loop
    Catch ex As Exception
        Console.WriteLine("Error Occured at #" & dummyCounter)
    End Try
    ThWork = Nothing
    If CancelWork Then
        Console.Title = "Work Stopped at #" & dummyCounter
    End If
End Sub

End Module

这只是一个简单的示例代码,您可以根据具体情况进行定制。在大多数情况下,在您退出应用程序GUI的情况下处理数据,我希望它完成它的工作,除非我明确告诉它不要这样做。