2013-06-03 30 views
6

Ekranda kullanıcı arabirimi olmadan bunu yapmanın bir yolu var mı? Şu anda UI olmayan küçük bir programa 3270 ana bilgisayardan her 60 saniyede bir Metin Dosyası okuma ve yazma bilgisi alıyorum, kullanıcının 60 saniyelik bekleme süresinin ortasında iptal etmek istediğini varsayalım. UI'den herhangi bir olay olmadan tuşa basmak mı?İş parçacığı uyurken bir tuşa basmak için 'Dinle'

cevap

1

Tuş vuruşlarını yakalamak için bir çeşit arabirime ihtiyacınız vardır. İşte

(boş bir tane oluşturun ve defauklt modüle yapıştırın) bir konsol uygulamasında çalışan örneğidir

komutları girmek için kullanıcı için GUI boşta bırakarak bir arka plan iş parçacığı işleme "ŞEY" verir . Bu durumda 1000

Opsiyon sadece basit 1 saniyelik bir gecikme sayacı Metin

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

karşılaştırın sadece basit bir örnek kod – user1937198

+0

oldu çıkarken stopwork aramak istediğiniz olabilir ve her özel durum için özelleştirirsiniz. Çoğu durumda uygulama GUI'sini bıraktığınız verileri işlerken, açık bir şekilde bunu söylemediğim sürece bu işi bitirmesini isterim. – DarrenMB

İlgili konular