6
有沒有辦法在屏幕上沒有UI的情況下執行此操作?目前,我正在使用這個小型的非UI程序,每隔60秒將信息從3270大型機讀取到文本文件,假設用戶想要在60秒等待中取消信息,那麼我如何「聽」按鍵沒有來自用戶界面的任何事件?在線程正在休眠時「偵聽」按鍵
有沒有辦法在屏幕上沒有UI的情況下執行此操作?目前,我正在使用這個小型的非UI程序,每隔60秒將信息從3270大型機讀取到文本文件,假設用戶想要在60秒等待中取消信息,那麼我如何「聽」按鍵沒有來自用戶界面的任何事件?在線程正在休眠時「偵聽」按鍵
您需要某種接口來捕獲按鍵。
下面是示例,在一個控制檯應用程序(創建空白一個和粘貼到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
你可能要退出 – user1937198
時只是簡單的例子代碼來調用限緊,你會調整到每一個具體情況。在大多數情況下,在你退出應用程序GUI時處理數據,除非我明確告訴它,否則我會希望它完成它的工作。 – DarrenMB