Laden...

Datenempfang des Streams als Event feststellen bzw. Datenempfang direkt in eine Textbox weiterleiten

Erstellt von DerPapenberg vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.388 Views
D
DerPapenberg Themenstarter:in
116 Beiträge seit 2010
vor 11 Jahren
Datenempfang des Streams als Event feststellen bzw. Datenempfang direkt in eine Textbox weiterleiten

Hallo zusammen,

ich stehe z.Z vor folgendem Problem:

Die Bibliothek System.Net.FtpClient (http://netftp.codeplex.com/) stellt über der Property FtpLogStream ein Objekt vom Typ _Stream _zur Verfügung. Dieser Stream teilt permanent die Kommunikation zwischen dem Client und dem FTP-Server zeitnah mit. Neben dem loggen möchte ich die Streamausgabe kontinuierlich in einer Textbox ausgeben. Mein Problem liegt jetzt darin, dass ich feststellen muss, wann der Stream erneut Daten empfangen hat, damit ich diese in die Textbox schreiben kann. Nun verfügt die Klasse Stream über kein Event ala "DatenEmpfangen". Wie kann ich festellen, ab wann der Stream Daten empfangen hat bzw. wie kann ich die Daten des Streams direkt beim erneuten Datenempfang in eine Textbox umleiten?

Gruß

1.346 Beiträge seit 2008
vor 11 Jahren

Ich bin mal so frei und poste in C# 5 + .net Framework 4.5 Beispiel


class Form1 : Form
{
	FtpClient _ftpClient;
	Stream _ftpLogStream;
	TextReader _logReader;
	public Form1()
	{
		InitializeComponent();
		
		InitializeFtp();
	}

	void InitializeFtp()
	{
		//...
		StartReadingAsync();
	}

	async void StartReadingAsync()
	{
		_ftpLogStream = _ftpClient.FtpLogStream;
		_logReader = new StreamReader(_ftpLogStream);
		while(true)
		{
			var line = await _logReader.ReadLineAsync();
			textBox1.Text += line + Environment.NewLine;
		}
	}
}
D
DerPapenberg Themenstarter:in
116 Beiträge seit 2010
vor 11 Jahren

Hi pdelvo,

ich selber verwende z.Z noch das Framework 4.0, wodurch async/await leider nicht für mich verwendbar ist. Aber wie ich an deinem Beispiel sehe, geht es in Richtung Mutlithreading. Danke für dein Beispiel!

Gruß