2013-06-03 63 views
6

有沒有辦法在屏幕上沒有UI的情況下執行此操作?目前,我正在使用這個小型的非UI程序,每隔60秒將信息從3270大型機讀取到文本文件,假設用戶想要在60秒等待中取消信息,那麼我如何「聽」按鍵沒有來自用戶界面的任何事件?在線程正在休眠時「偵聽」按鍵

回答

1

您需要某種接口來捕獲按鍵。

下面是示例,在一個控制檯應用程序(創建空白一個和粘貼到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 
+0

你可能要退出 – user1937198

+0

時只是簡單的例子代碼來調用限緊,你會調整到每一個具體情況。在大多數情況下,在你退出應用程序GUI時處理數據,除非我明確告訴它,否則我會希望它完成它的工作。 – DarrenMB