2013-06-03 27 views
6

Có cách nào để thực hiện việc này không có giao diện người dùng trên màn hình không? Hiện tại tôi đang có chương trình không giao diện người dùng nhỏ này đọc và ghi thông tin từ máy tính lớn 3270 đến một tệp văn bản sau mỗi 60 giây, giả sử người dùng muốn hủy ở giữa thời gian chờ 60 giây, làm cách nào tôi có thể 'nghe' nhấn phím mà không có bất kỳ sự kiện nào từ giao diện người dùng?'Nghe' để bấm phím trong khi chuỗi đang ngủ

Trả lời

1

Bạn cần một số loại giao diện để nắm bắt tổ hợp phím.

Dưới đây là ví dụ mà chạy trong một ứng dụng giao diện điều khiển (tạo một trống và dán vào module defauklt)

Nó cho phép xử lý "cái gì đó" trong một thread nền trong khi rời khỏi nhàn rỗi GUI cho người dùng nhập vào lệnh . Trong trường hợp này chỉ là một đơn giản 1 giây chậm trễ ngược lại 1000.

Lựa chọn 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

bạn có thể muốn gọi stopwork khi thoát – user1937198

+0

Được chỉ đơn giản mã ví dụ và bạn sẽ chỉnh cho từng trường hợp cụ thể. trong hầu hết các trường hợp xử lý dữ liệu mà bạn thoát khỏi GUI ứng dụng, tôi muốn nó hoàn thành công việc của nó trừ khi tôi nói rõ ràng nó không quá. – DarrenMB

Các vấn đề liên quan