im Thread auf Klassen Daten zugreifen
-
Hallo,
ich komme vom Visual C++ rüber, und habe mir jetzt das Microsoft Visual C# 2005 Express Beta geholt.
In Visual C++ war es ja möglich über
MyProgramDlg* pDlg = (MyProgramDlg*)pParam;
Einen Zeiger auf die andere Klassen zu legen (in diesem Fall die Dialogfeldklasse). Und dann konnte man bequem über
pDlg->irgendneVariable;
auf Variablen und Funktionen der Dialogfeldklasse zugreifen. Und nun suche ich ein entsprechendes Äquivalent dazu in C#.
Hier mein Fall wieso ich das brauche. Ich schreib grad ne kleine FTP Anwendung. FTP Verbindung kann ich nun durch eine importierte FTP Klasse problemlos auf- und abbauen. Dateien herunterladen, und hochladen. Alles ganz einfach. Nun wollte ich die Klasse ein bischen erweitern, damit man auch die übertragenen Bytes über eine Memberfunktion dieser Klasse zurückbekommen kann. Und hier beginnt das schwierige. Zu Testzwecken inkrementiere ich nur eine Variable (War noch zu faul um die genauen Parameter zu ermitteln).
Hier mal der Code Ausschnitt.
namespace TestClient { partial class Form1 : Form { public Form1() { InitializeComponent(); } public static void Ftp_download() { FtpClient ftp = new FtpClient("127.0.0.1", "testuser", "testpasswort"); ftp.Login(); ftp.ChangeDir("testordner"); ftp.Download("testdatei.txt"); ftp.Close(); } private void button1_Click(object sender, EventArgs e) { ThreadStart thread_download = new ThreadStart(Ftp_download); Thread t1 = new Thread(thread_download); t1.Start(); } } }
Mit dem button1_Click gerät alles in Rollen. Dort erstelle und starte ich den Thread. Da der Thread natürlich keine schleife ist, sondern letztendlich nur ein Download Aufruf, würde ich gern über einen zweiten Thread starten, der regelmäßig die Funktion
LONG get_received_bytes();
der Instanz "ftp" aufruft.Ich dachte mir, die Zeile
FtpClient ftp = new FtpClient("127.0.0.1", "testuser", "testpasswort");
global zur Verfügung zu stellen, indem ich sie nach der Zeile
partial class Form1 : Form {
einfüge. Das funktionierte aber nur in der button1_Click Funktion. Im Thread bekam ich eben den Fehler
An object reference is required for the nonstatic field, method, or property 'TestClient.Form1.ftp'
Er meckert einfach, weil er, nachdem ich Instanzerzeugung global zur Verfügung gestellt hab, nicht auf diese Instanz zugreifen kann. Das gleiche hatte ich mit Visual C++ anfangs auch.
Und deswegen suche ich eben das Äquivalent aus Visual C++ (eine Zeiger auf die Dialogfeldklasse zu richten).
Bin für jede Hilfe Dankbar
Gruß
Markus Seidl
-
Hat sich nun erledigt. Ich wusste noch nicht, dass man in C# die Thread auch Non-Static erstellen kann. Kommt davon wenn man das zu stark mit C++ vergleicht
So langsam gefällt mir die Sprache immer mehr.Gruß
Markus Seidl