vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 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: Asynchroner Webrequest 
Autor: Drapondur
Datum: 06.01.10 17:59

Hi,

Du kannst das erreichen, indem Du einen Event mit Custom Event implementierst.
Beispiel (ich hoffe das geht so auch mit Compact Framework, hab's nur in normaler WinForms-App getestet):
Imports System.ComponentModel
 
Public Class Worker
 
	Public Sub WorkAsync()
		'Statt eines WebRequests
		Dim t As New System.Threading.ThreadStart(AddressOf Work)
		t.BeginInvoke(AddressOf WorkCallback, Nothing)
	End Sub
 
	Public Sub Work()
		Debug.WriteLine("Starting Work")
		System.Threading.Thread.Sleep(2000)
		Debug.WriteLine("Work done")
	End Sub
 
	Private Sub WorkCallback(ByVal ar As IAsyncResult)
		OnWorkCompleted(EventArgs.Empty)
	End Sub
 
	Protected Overridable Sub OnWorkCompleted(ByVal e As EventArgs)
		RaiseEvent WorkCompleted(Me, e)
	End Sub
 
	Private _workCompletedHandlers As New List(Of EventHandler)
	Public Custom Event WorkCompleted As EventHandler
		AddHandler(ByVal value As EventHandler)
			SyncLock Me
				_workCompletedHandlers.Add(value)
			End SyncLock
		End AddHandler
 
		RemoveHandler(ByVal value As EventHandler)
			SyncLock Me
				_workCompletedHandlers.Remove(value)
			End SyncLock
		End RemoveHandler
 
		RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
			'Kopie der angefügten Eventhandler holen
			Dim handlers As EventHandler()
			SyncLock Me
				handlers = _workCompletedHandlers.ToArray()
			End SyncLock
 
			'Durch Handler iterieren
			For Each handler As EventHandler In handlers
				'Versuchen, das Zielobjekt als ISynchronizeInvoke zu holen 
				'(WinForms-Controls implentieren ISynchronizeInvoke)
				Dim isyncInvoke As ISynchronizeInvoke = TryCast(handler.Target, _
  ISynchronizeInvoke)
				If isyncInvoke IsNot Nothing AndAlso isyncInvoke.InvokeRequired Then
					Try
						'Handler indirekt über ISynchronizeInvoke abarbeiten
						isyncInvoke.BeginInvoke(handler, New Object() {sender, e})
					Catch ex As Exception
						'Immer Catch, da man nicht sicherstellen kann, 
						'dass das Taget-Objekt noch nicht disposed wurde. 
					End Try
				Else
					'Handler direkt aufrufen
					handler(sender, e)
				End If
			Next
		End RaiseEvent
	End Event
 
End Class
und Die Form dazu
Public Class Form1
	Private WithEvents _client As New Worker
 
	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
  System.EventArgs) Handles Button1.Click
		Debug.WriteLine("WinFormsThread = " & _
System.Threading.Thread.CurrentThread.GetHashCode())
		AddHandler _client.WorkCompleted, AddressOf TestTarget.Client_WorkCompleted
		_client.WorkAsync()
	End Sub
 
 
	Private Sub _client_WorkCompleted(ByVal sender As Object, ByVal e As _
  System.EventArgs) Handles _client.WorkCompleted
		Debug.WriteLine("WinForm WorkCompleted auf Thread " & _
System.Threading.Thread.CurrentThread.GetHashCode())
		Me.TextBox1.Text = Now.ToString()
	End Sub
 
	Private Class TestTarget
		Public Shared Sub Client_WorkCompleted(ByVal sender As Object, ByVal e As _
  System.EventArgs)
			Debug.WriteLine("TestTarget WorkCompleted auf Thread " & _
System.Threading.Thread.CurrentThread.GetHashCode())
			RemoveHandler CType(sender, Worker).WorkCompleted, AddressOf _
Client_WorkCompleted
		End Sub
	End Class
End Class
Ciao
D.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Asynchroner Webrequest2.177Maas06.01.10 10:32
Re: Asynchroner Webrequest1.251ModeratorDaveS06.01.10 13:13
Re: Asynchroner Webrequest1.172Maas06.01.10 13:22
Re: Asynchroner Webrequest1.134ModeratorDaveS06.01.10 13:28
Re: Asynchroner Webrequest1.093Maas06.01.10 13:31
Re: Asynchroner Webrequest1.078ModeratorDaveS06.01.10 14:10
Re: Asynchroner Webrequest1.122Maas06.01.10 14:22
Re: Asynchroner Webrequest1.076ModeratorDaveS06.01.10 15:36
Re: Asynchroner Webrequest1.428Drapondur06.01.10 17:59
Re: Asynchroner Webrequest1.193ModeratorDaveS06.01.10 18:18
Re: Asynchroner Webrequest1.099Drapondur06.01.10 18:34
Re: Asynchroner Webrequest1.106ModeratorDaveS06.01.10 18:45
Re: Asynchroner Webrequest1.089ModeratorDaveS06.01.10 19:11
Re: Asynchroner Webrequest1.123Drapondur06.01.10 19:17
Re: Asynchroner Webrequest1.114ModeratorDaveS06.01.10 19:27
Re: Asynchroner Webrequest1.073Maas06.01.10 19:50
Re: Asynchroner Webrequest1.110Drapondur06.01.10 21:18
Re: Asynchroner Webrequest1.070ModeratorDaveS06.01.10 21:32

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