Toon posts:

[C#] Wachten op Event vanuit Methode

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een programma waarbij gegevens via het internet of over een netwerk verstuurd moeten worden. Nou heb ik een class Client. Op die class heb ik een methode geschreven die de directory veranderd op de server. Deze methode zou een boolean waarde moeten teruggeven, die aangeeft of de operatie gelukt is of niet (bijvoorbeeld als de directory niet bestaat op de server). Het eerste wat ik doe in deze methode is het commando versturen. Vervolgens zou ik dan moeten wachten op een antwoord van de server. En daar zit het probleem.

Ik zou namelijk met een simpele while de property DataAvailable van de NetworkStream in de gaten kunnen houden. Daarbij heb ik echter een probleem op het moment dat de binnenkomende data niet bestemd is voor de betreffende methode, maar voor een andere methode bijvoorbeeld (als reply op een andere actie). Wat ik dus eigenlijk wou doen is de binnenkomende data vanuit een andere thread in de gaten houden, inlezen, en dan op basis van die data een event aanroepen, zodat de methode die wacht op antwoord verder kan gaan. De vraag is echter, hoe kan ik dit implementeren. Ik heb gekeken naar het gebruik van delegates, maar volgens mij kan ik daarmee niet bereiken wat ik wil bereiken.

Iemand met ideeën hierover?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik denk dat het belangrijk is om te vertellen hoe je controleert of de operatie lukt? vaak zal dit toch moeten door data uit te lezen uit de stream. Ik weet niet of er in de .net stream ook een optie Peek zit( dit zou je even na moeten zoeken in de msdn) maar daar zou je mischien gebruik van kunnen maken als je echt de data nodig hebt en het moet in de stream blijven staan. Mischien kan je er ook over na denken om de verantwoordelijkheid van het controleren van de operatie ergens anders neer te leggen. Maar ik denk dat je eerst even meer informatie moet geven over wat je nou echt verstuurt/ontvangt

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op 13 March 2003 @ 14:59:
Ik denk dat het belangrijk is om te vertellen hoe je controleert of de operatie lukt? vaak zal dit toch moeten door data uit te lezen uit de stream. Ik weet niet of er in de .net stream ook een optie Peek zit( dit zou je even na moeten zoeken in de msdn) maar daar zou je mischien gebruik van kunnen maken als je echt de data nodig hebt en het moet in de stream blijven staan. Mischien kan je er ook over na denken om de verantwoordelijkheid van het controleren van de operatie ergens anders neer te leggen. Maar ik denk dat je eerst even meer informatie moet geven over wat je nou echt verstuurt/ontvangt
Nou, het is eigenlijk heel simpel:

code:
1
2
Client: CWD <path>
Server: OK/ERR (of zoiets dergelijks)


'k geloof dat er wel een Peek functie bestaat, maar dat weet ik ook niet helemaal zeker, dat zal ik eens even uitzoeken. Maar aangezien het voor het aanroepende object wel interessant is om te weten of het gelukt is om van directory te veranderen, lijkt het me wel handig om de methode ChangeFolder een waarde terug te laten geven, die aangeeft of het wel of niet gelukt is.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Kijk eens naar de methodes BeginReceive() en EndReceive() van de Socket class. Deze geef je een delegate (zeg maar pointer naar een functie) mee en die wordt aangeroepen zodra er data binnenkomt.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op 13 maart 2003 @ 15:02:
[...]


Nou, het is eigenlijk heel simpel:

code:
1
2
Client: CWD <path>
Server: OK/ERR (of zoiets dergelijks)


'k geloof dat er wel een Peek functie bestaat, maar dat weet ik ook niet helemaal zeker, dat zal ik eens even uitzoeken. Maar aangezien het voor het aanroepende object wel interessant is om te weten of het gelukt is om van directory te veranderen, lijkt het me wel handig om de methode ChangeFolder een waarde terug te laten geven, die aangeeft of het wel of niet gelukt is.
Ik snap alleen niet dat de data die de server terugstuurt niet voor die methode is bedoelt. Het is een direct result van de call die die methode doet. Dus het lijkt me dat die methode dan ook gewoon het result uitleest met een read(). en die is als het goed is blocking en dan is het probleem dus opgelost lijkt mij

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”