2013-06-03 2 views
6

Есть ли способ сделать это без интерфейса пользователя на экране? В настоящее время у меня есть эта небольшая программа, отличная от UI, для чтения и записи информации с 3280 мэйнфрейма в текстовый файл каждые 60 секунд, предположим, что пользователь хочет отменить в середине 60 секунд ожидания, как я могу «прослушать» без нажатия каких-либо событий из пользовательского интерфейса?«Слушайте» нажатие клавиши, когда нить спала

ответ

1

Вам нужен какой-то интерфейс для захвата нажатий клавиш.

Вот пример, который запускается в консольном приложении (создать один пустой и вставить в модуль defauklt)

Это позволяет перерабатывать «НЕЧТО» в фоновом потоке, оставляя GUI вхолостую для ввода пользователем команд , В этом случае только простой счетчик 1 второй задержки 1000.

Option Compare Text

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

вы можете вызвать stopwork при выходе – user1937198

+0

был только простой пример кода, и вы бы адаптировать к каждому конкретному случаю. в большинстве случаев обрабатывая данные, когда вы выходите из графического интерфейса приложения, я бы хотел, чтобы он завершил его работу, если я прямо не сказал об этом. – DarrenMB

Смежные вопросы