2013-06-03 4 views
6

画面にUIを表示しないでこれを行う方法はありますか?現在のところ、この小さな非UIプログラムでは、3270メインフレームからテキストファイルに60秒ごとに情報を読み書きしていますが、ユーザーが60秒待機の途中で取り消したいとしたら、どうすればUIからのイベントなしでkeypress?スレッドがスリープしている間に「リッスン」するとキーボードが鳴ります

答えて

1

キーストロークをキャプチャするには、何らかのインターフェイスが必要です。ここ

は、コマンドを入力するユーザのためのGUIのアイドル状態を残しながら、バックグラウンドスレッドで処理「何かを」可能にするコンソールアプリケーションで実行例(ブランクを作成し、defaukltモジュールに貼り付け)

あります。この場合、1000

オプションへの単なる1秒の遅延カウンタがテキスト

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

した終了時stopworkを呼び出したいかもしれないと、あなたはそれぞれの特定のケースに合わせて調整します。ほとんどの場合、アプリケーションGUIを終了したデータを処理する際に、明示的に指定しない限り、その作業を終了したいと考えています。 – DarrenMB

関連する問題