NetworkStream BeginRead / EndRead
Ich bin wirklich neu in C# zu Programmieren und entwickle ich eine Anwendung basierend auf einem TcpClient.
Ich würde gerne wissen, wie BeginRead & EndRead, ich habe schon gelesen das MSN-Dokumentation, aber nicht helfen.
Habe ich diese :
private void Send() { TcpClient _client = new TcpClient("host", 80); NetworkStream ns = _client.GetStream(); ns.Flush(); / ... ns.Write(buffer, 0, buffer.Length); int BUFFER_SIZE = 1024; byte[] received = new byte[BUFFER_SIZE]; ns.BeginRead(received, 0, 0, new AsyncCallback(OnBeginRead), ns); } private void OnBeginRead(IAsyncResult ar) { NetworkStream ns = (NetworkStream)ar.AsyncState; int BUFFER_SIZE = 1024; byte[] received = new byte[BUFFER_SIZE]; string result = String.Empty; ns.EndRead(ar); int read; while (ns.DataAvailable) { read = ns.Read(received, 0, BUFFER_SIZE); result += Encoding.ASCII.GetString(received); received = new byte[BUFFER_SIZE]; } result = result.Trim(new char[] { '\0' }); //Want to update Form here with result }
Wie kann ich eine Form-Komponente mit Ergebnis ?
Danke für die Hilfe.
Ist dies Winforms?
Ja, es ist WinForms.
Ich hatte dasselbe problem hier, und ich wollte wissen ob es OK ist, zu steigen, ein Ereignis genau, wo Sie einen Kommentar eingefügt Zeile für die Aktualisierung der Form. abonnieren Sie das Ereignis von Form und aktualisieren, was es ist? oder ist es in einem separaten thread und wird dazu führen, einige problem? Danke.
Ja, es ist WinForms.
Ich hatte dasselbe problem hier, und ich wollte wissen ob es OK ist, zu steigen, ein Ereignis genau, wo Sie einen Kommentar eingefügt Zeile für die Aktualisierung der Form. abonnieren Sie das Ereignis von Form und aktualisieren, was es ist? oder ist es in einem separaten thread und wird dazu führen, einige problem? Danke.
InformationsquelleAutor Arnaud F. | 2010-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste, empfehle ich lernen eine Menge über multithreading. Dann kommen Sie zurück und erfahren Sie mehr über sockets. Beide haben Recht steilen Lernkurven, und versuchen zu bewältigen, ist sowohl ein viel zu handhaben.
Das heißt, Sie können nach einem update auf die Benutzeroberfläche, durch die Erfassung der UI-Kontext über
TaskScheduler.FromCurrentSynchronizationContext
- und Terminplanung einTask
zu, dassTaskScheduler
. Wenn das TPL nicht verfügbar ist, dann können Sie einfachSynchronizationContext
direkt.InformationsquelleAutor Stephen Cleary