Fou-Lu
Lt. Junior Grade
- Registriert
- Aug. 2006
- Beiträge
- 290
Hallo Leute,
ich steck derzeit ganz schön in Schwierigkeiten bei meinem Code und komme wirklich nicht mehr weiter...
Ich wollte mir eigentlich eine Bibliothek schreiben um Dateien über das Netzwerk zu versenden. Das Hauptaugenmerk beruht darauf, dass es wirklich eine "Bibliothek" also DLL sein soll, damit man es in anderen Anwendungen jederzeit einbauen kann.
Nun denn... jedenfalls funktioniert der Datei-Versand und der Verbindungsaufbau bereits beinahe perfekt, aber ich wollte eigentlich beim Verbinden oder Dateiempfang jeweils Rückmeldungen darüber haben, dass z.B. "Verbindung hergestellt" oder "Datei empfangen" ist/wurde.
Erst habe ich dabei an Tooltips gedacht, doch wie ich feststellen musste funktioniert das nur, wenn man ein TrayIcon einblendet (da es jedoch eine Bibliothek ist, kommt das mehr als nur schlecht).
Dann war meine Idee ich erstelle mir einfach eine passende Form und lass es im Stil von den Outlook-Meldungen einblenden... hat auch Anfangs wunderbar geklappt, jedoch bin ich jetzt auf ein Problem gestoßen und komm nich weiter.
Hier erstmal der Code wo das Problem auftaucht:
BalloonTip ist lediglich eine normale Form (ohne FormBorder) und mit einem Label.
Im Label wird einfach nur der Text angezeigt. An sonsten hat es noch 2 Timer.
Einer davon ist für das ein- und ausblenden der Form zuständig (so hab ich die
Animation realisiert - opacity der Form von 0 auf 1 setzen bei jedem Tick im 0.1 Schritt).
Der zweite Timer prüft nur ob die Form bereits X Sekunden eingeblendet ist, wenn
ja, dann wird diese geschlossen.
Ok... also das ganze ein- und ausblenden der Form funktioniert auch soweit, aber meine Connect-Methode wird in einem Extra-Thread ausgeführt (damit die Anwendung nicht einfriert während sie auf eingehende Verbindungen wartet) und da ist das Problem. In diesem Fall wird nämlich die Form mit der Meldung nicht eingeblendet wie sie soll. In der Taskleiste sieht man kurz eine Meldung aufblinken als ob ein Programm (bzw. eine Form) geöffnet wurde und dann wird sie sofort wieder geschlossen, aber ich verstehe wirklich nicht wieso.
In jedem anderen Szenario funktioniert sie ja auch nur eben nicht in dieser Connect-Methode. Kann es daran liegen, dass diese in einem eigenen Thread ausgeführt wird?
ich steck derzeit ganz schön in Schwierigkeiten bei meinem Code und komme wirklich nicht mehr weiter...
Ich wollte mir eigentlich eine Bibliothek schreiben um Dateien über das Netzwerk zu versenden. Das Hauptaugenmerk beruht darauf, dass es wirklich eine "Bibliothek" also DLL sein soll, damit man es in anderen Anwendungen jederzeit einbauen kann.
Nun denn... jedenfalls funktioniert der Datei-Versand und der Verbindungsaufbau bereits beinahe perfekt, aber ich wollte eigentlich beim Verbinden oder Dateiempfang jeweils Rückmeldungen darüber haben, dass z.B. "Verbindung hergestellt" oder "Datei empfangen" ist/wurde.
Erst habe ich dabei an Tooltips gedacht, doch wie ich feststellen musste funktioniert das nur, wenn man ein TrayIcon einblendet (da es jedoch eine Bibliothek ist, kommt das mehr als nur schlecht).
Dann war meine Idee ich erstelle mir einfach eine passende Form und lass es im Stil von den Outlook-Meldungen einblenden... hat auch Anfangs wunderbar geklappt, jedoch bin ich jetzt auf ein Problem gestoßen und komm nich weiter.
Hier erstmal der Code wo das Problem auftaucht:
PHP:
public void Connect() {
//prüft ob bereits eine Verbindung zu einem Host besteht
if (_status == Status.Stopped) {
try {
//Schaut ob der Listener bereits gestartet ist
if (listening == false) {
listener = new TcpListener(IPAddress.Any, port);
listener.Start();
}
listening = true;
//wartet auf eingehende Verbindungen
client = listener.AcceptTcpClient();
_status = Status.Connected;
//stopt den Listener, nachdem sich ein Client verbunden hat
listener.Stop();
listening = false;
nStream = client.GetStream();
//startet den Thread der auf eingehende Dateien wartet
//und diese abspeichert
receiverThread = new Thread(new ThreadStart(ReceiveFile));
receiverThread.Start();
//zeigt eine Meldung, über das erfolgreiche Herstellen einer Verbindung, an.
ShowBalloon("Verbindung erfolgreich hergestellt.\r\n" +
"Sie können nun Dateien senden und empfangen!");
} catch (Exception ex) {
_status = Status.Stopped;
ShowBalloon("Connect()\r\n" + ex.Message);
}
} else {
ShowBalloon("Es besteht bereits eine Verbindung mit einem Remotehost!");
}
}
BalloonTip ist lediglich eine normale Form (ohne FormBorder) und mit einem Label.
Im Label wird einfach nur der Text angezeigt. An sonsten hat es noch 2 Timer.
Einer davon ist für das ein- und ausblenden der Form zuständig (so hab ich die
Animation realisiert - opacity der Form von 0 auf 1 setzen bei jedem Tick im 0.1 Schritt).
Der zweite Timer prüft nur ob die Form bereits X Sekunden eingeblendet ist, wenn
ja, dann wird diese geschlossen.
PHP:
private void ShowBalloon(string msg) {
BalloonTip balloon = new BalloonTip(msg);
balloon.Show();
balloon.TopMost = true;
balloon.BringToFront();
}
Ok... also das ganze ein- und ausblenden der Form funktioniert auch soweit, aber meine Connect-Methode wird in einem Extra-Thread ausgeführt (damit die Anwendung nicht einfriert während sie auf eingehende Verbindungen wartet) und da ist das Problem. In diesem Fall wird nämlich die Form mit der Meldung nicht eingeblendet wie sie soll. In der Taskleiste sieht man kurz eine Meldung aufblinken als ob ein Programm (bzw. eine Form) geöffnet wurde und dann wird sie sofort wieder geschlossen, aber ich verstehe wirklich nicht wieso.
In jedem anderen Szenario funktioniert sie ja auch nur eben nicht in dieser Connect-Methode. Kann es daran liegen, dass diese in einem eigenen Thread ausgeführt wird?