vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Warteschleife in VB 2008 Express 
Autor: Drapondur
Datum: 06.02.10 04:06

Hi,

warten kannst Du ganz leicht so:
	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Button1.Click
		Debug.WriteLine("Beginne mit Warten")
		Dim endTime As DateTime = Now.AddSeconds(10)
		While Now < endTime
			'Der Anwendung ermöglichen, Events zu verarbeiten
			Application.DoEvents()
			'Sleep, um die Prozessorlast nicht zu hoch zu drücken
			Threading.Thread.Sleep(1)
			'Wenn Form geschlossen wurde Schleife abbrechen
			If Me.IsDisposed Then
				Return
			End If
		End While
		Debug.WriteLine("Fertig mit Warten")
	End Sub
Sauberer wäre es jedoch eine solche Aufgabe, wie die Deine auf einem separaten Thread zu machen. Ziehe eine BackgroundWorker-Komponente auf Deine Form und dann
Private _waitHandle As New Threading.ManualResetEvent(False)
 
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Button2.Click
	Debug.WriteLine("Starte Beabeitung auf Thread " & _
Threading.Thread.CurrentThread.ManagedThreadId)
	Me.BackgroundWorker1.RunWorkerAsync()
End Sub
 
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As _
  System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
	Debug.WriteLine("Beabeitung auf Thread " & _
Threading.Thread.CurrentThread.ManagedThreadId)
	If Me.SerialPort1.IsOpen Then
		Me.SerialPort1.Close()
	End If
 
	'Führ dazu, dass weiter unten bei _waitHandle.WaitOne der Thread angehalten 
' wird.
	_waitHandle.Reset()
	Me.SerialPort1.Open()
	Debug.WriteLine("Warte auf Antwort auf Port " & Me.SerialPort1.PortName)
	Dim isSignaled As Boolean = _waitHandle.WaitOne(TimeSpan.FromSeconds(10), _
  False)
	Debug.WriteLine("Warten beendet. Daten auf Port empfangen = " & isSignaled)
 
End Sub
 
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As _
  System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
	Debug.WriteLine("Datenempfang auf Thread " & _
Threading.Thread.CurrentThread.ManagedThreadId)
	If _waitHandle IsNot Nothing Then
		'Führt dazu, dass das Warten abgebrochen wird bzw. gar nicht erst anfängt
		_waitHandle.Set()
	End If
End Sub
Kleine Anmerkung: Ich habe das nicht mit einem angeschlossenen Gerät am COM Port probiert, da ich im Augenblick nichts zum Anschließen habe. Die Methode SerialPort1_DataReceived konnte ich also nicht ausprobieren. Sollte aber klappen.

Ciao
D.

P.S.: Noch ein kurzes MSDN-Zitat zum Timer: The Windows Forms Timer component is single-threaded, and is limited to an accuracy of 55 milliseconds. Deine 10 msec Intervallzeit hätten also nicht so funktioniert, wie Du es Dir gewünscht hättest.

Beitrag wurde zuletzt am 06.02.10 um 04:12:45 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Warteschleife in VB 2008 Express6.900uncleyogy05.02.10 13:41
Re: Warteschleife in VB 2008 Express5.689jvbsl05.02.10 13:56
Re: Warteschleife in VB 2008 Express6.317ModeratorRalfE05.02.10 14:02
Re: Warteschleife in VB 2008 Express5.654uncleyogy05.02.10 15:14
Re: Warteschleife in VB 2008 Express5.669jvbsl05.02.10 15:38
Re: Warteschleife in VB 2008 Express5.602uncleyogy05.02.10 15:52
Schon wieder" Warteschleife in VB 2008 Express"5.732uncleyogy05.02.10 17:26
Re: Warteschleife in VB 2008 Express5.732Drapondur06.02.10 04:06
Re: Warteschleife in VB 2008 Express5.561uncleyogy06.02.10 12:33

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel