Laden...

Forenbeiträge von wizer Ingesamt 196 Beiträge

11.02.2015 - 10:26 Uhr

Richtig, mit einer ListView geht sowas wunderbar!

Zum Thema "Bilder sollen erst geladen werden wenn sie wirklich sichtbar werden". Genau für so einen Fall verwendet man das WrapGrid. Dieses Control unterstützt Virtualisierung des Inhaltes, was soviel bedeutet wie, die Items werden erst dann gerendert, wenn sie in den Fokus kommen.
MSDN: "The content of a WrapGrid is virtualized. This can improve performance when you work with large data sets. For more info, see Load, store, and display large sets of data efficiently." https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.wrapgrid.aspx

Jetzt kannst du sagen, erst wenn deine Getter-Property in deinem ViewModel angesprochen wird, lädst du das Bild. Beispiel:


private ImageSource _image;
public ImageSource Image
{
 get 
 {
   if (_image != null) return _image; 
  
   LoadImageAsync();
   return _image;
}

Die Methode LoadImageAsync machst wie der Name schon sagt asynchron. Wenn du sie dann noch innerhalb eines neuen Task startest, blockierst du auch nicht die UI:

Task.Run(async () => await LoadImageAsync());

Den Task den du von Task.Run zurück bekommst, speicherst du dir in eine Variable um zu prüfen ob der Task schon läuft (in deinem Getter). Dadurch verhinderst du mehrfaches laden des Bildes.

Lg

07.10.2014 - 12:58 Uhr

Hallo Community!

Ich suche leidenschaftliche Programmierer die bereits einiges mit der Windows Runtime programmiert haben (Win8,Win81,WP8,WP81, Universal App) und etwas zu meinem Gemeinschaftsprojekt beitragen wollen. Techniken wie Dependency Injection, MVVM, Unit Testing, Patterns (best practices), Logging, ... wären von Vorteil da vieles davon im Code vorkommt.

Das Projekt ist eine Serien Bibliothek die es einem erlaubt nach Serien zu suchen und sich darüber zu informieren. Die API erlaubt es zu einer Serie Staffeln, Episoden, Schauspieler, Fanarts und noch weitere generelle Informationen anzuzeigen. Die App soll einen darüber informieren wenn neue Folgen erschienen sind bzw wann diese erscheinen.

Die verwendete API ist TheTVDB (http://www.thetvdb.com).
Der API Wrapper ist schon weit fortgeschritten, wenn nicht sogar schon fertig. Zu finden ist dieser auf GitHub (https://github.com/ViktorHofer/TheTVDBSharp).

Der derzeitige Status des Projektes verspricht sehr viel Potenzial. Architektur wurde bereits aufgebaut, Web Schnittstelle und Caching ist auch bereits registriert. Im Prinzip muss die App nur noch mit mehr Leben gefüllt werden (die Serien Page fehlt noch komplett). Die App ist bereits benutzbar und erlaubt es einem nach Serien zu suchen und diese zu favorisieren und auf der Startseite anzuzeigen.

Falls jemand Interesse an dem Projekt hat bitte auf GitHub vorbei schauen und entweder forken oder mir schreiben um als Collaborator aufgenommen zu werden.

https://github.com/ViktorHofer/SeriesManager

Liebe Grüße
Viktor Hofer

09.03.2011 - 17:54 Uhr

Hallo Community!

Ich habe das folgende Problem. Ich habe bei mir zu Hause einen "Server" PC der mit einem Canon LBP2900 Drucker verbunden ist. Dieser Drucker ist auch als Netzwerkdrucker freigegeben. Leider gibt es für den Drucker nur 32-Bit Treiber (es gibt zwar 64-Bit Treiber, diese sind jedoch sehr fehlerhaft und bringen den Spooler ständig zum Absturz). Das Problem ist jetzt, dass alle 32-Bit Maschinen im Netzwerk zwar ganz normal drucken können, ein 64-Bit Nutzer jedoch nicht, da die Treiber fehlen. Deshalb bin ich jetzt den folgenden Weg gegangen:

Ich habe einen C# Windows Form geschrieben, die als virtueller Spooler dient. Das Programm macht nichts anderes, als zu überwachen ob XPS Files im druckordner vorhanden sind. Ich habe XPS gewählt, da dadurch ein unabhängiges Format gewählt wurde und standardmäßig ein XPS Printer auf Vista und 7 installiert ist.

Wenn nun eine neue XPS File in dem Ordner liegt, soll dieses gedruckt werden. Dies habe ich bis jetzt so realisiert:

foreach (string s in Directory.GetFiles(textBox1.Text))
            {
                Process printJob = new Process();
                printJob.StartInfo.FileName = s;
                printJob.StartInfo.UseShellExecute = true;
                printJob.StartInfo.Verb = "print";
                printJob.Start();

                Thread.Sleep(5000);
                SendKeys.Send("{ENTER}");
            }

Diese Lösung ist leider nicht vorteilhaft, da dies ein sehr unsauberer Weg ist. Nun wollte ich fragen, ob es überhaupt möglich ist in einer Windows Form eine XPS Datei direkt zu drucken?

Oda liege ich möglicherweise komplett falsch und es gibt eine viel bessere Lösung für das Treiberproblem?

Ich danke für Eure Antworten!

Mfg wizer

20.11.2010 - 20:38 Uhr

Ja die Grafiken sollten von außen ja nicht verfügbar sein, da sie sonst verändert werden könnten und das wäre sehr schlecht. Ich würde gerne einen anderen Weg gehen als mit der Ressource DLL. Ich schau mal wies so ausschaut...

Mfg wizer

20.11.2010 - 18:40 Uhr

Liebe Community!

Zurzeit versuche ich, bei meinen Applikationen Resourcen wie zum Beispiel Grafiken so gut wie möglich auszulagern. Dazu serialisiere ich zuerst alle Grafiken in eine Datei und gebe diese Datei dann dem eigentlichen Programm mit. Dieses deserialisiert die Datei dann wieder und greift auf die Grafiken zu. Leider habe ich noch niemanden gesehen, der wie ich vorgeht deshalb wollte ich fragen, ob dieses Konzept klug ist und ob es Nachteile dabei gibt?

Ebenso dachte ich mir, dass ich ein Programm erstelle, welches mir die Arbeit abnimmt und automatisch sollte Dateien erstellen kann. Gibt es hierbei ein Interesse?

Mfg wizer

20.11.2010 - 14:36 Uhr

Ja genau sowas wie progressOverlay halt nur statt einer progessbar ein UserControl. Aber ich werd mir da schon weiterhelfen können 😃
Danke für die Antwort!

Mfg wizer

20.11.2010 - 13:52 Uhr

Ja das mit den Updates ist ein wenig eigenartig... Ich werde standardmäßig den Punkt "Auf Aktualisierungen prüfen" auf false setzen. Der Fehler, dass das Programm und das Update gleichzeitig läuft habe ich jetzt schon behoben, also ab der neueren Version.

Der Start der Anwendung dauert in der Tat wegen der Suche nach Updates sehr lange. Ich hab schon versucht den Updatevorgang asynchron zu gestalten, nur kamen da einige Fehler zum Vorschein, die ich nicht so leicht beheben konnte, steht aber auf jeden Fall auf meiner TODO Liste 🙂

Das pausieren und stoppen von Prozessen ist ohne weiteres möglich 😉 Wichtig ist nur, dass man bei Prozessen mit Netzwerktechnologie beachtet, dass der Netzwerk eventuell nach einiger Zeit abreißen kann.

Ich werde die neue Version, wenn die asynchrone Updatesuche funktioniert, als Setup hier hochladen, damit ab dann nur noch per Update neue Versionen geladen werden müssen/können.

Danke für das Feedback 👍

Mfg wizer

18.11.2010 - 11:50 Uhr

Hey Lennart!

Danke für das Feedback! Die Probleme wurden nun behoben.
Die Black-Screen Funktion macht nichts anderes, als den Bildschirm dunkel zu machen, entweder für eine bestimmte zeit oder bis zum erneuten betätigen der ausgewählten Taste. Das Aktualisierungsintervall ist dafür da, damit man bestimmt wie oft die Funktion zum dunkel machen des Bildschirms aufgerufen werden soll, damit sie zum Beispiel schneller ist als Spiele die ja laufend im Bildschirm etwas zeichnen und so wieder den Bildschirm hell machen wollen.

Mfg wizer

PS: Update wird gleich hochgeladen 😃

18.11.2010 - 10:36 Uhr

Danke, das war auch eines meiner Ziele. Leider schränkt einen die Optik als Programmierer selbst auch oft stark ein 😉

Das einzige was ich selbst noch gern ändern würde an der Optik sind die Tabpages bzw das TabControl. Ich werde einfach mal nach einer "schöneren" Variante suchen 😉

Mfg wizer

17.11.2010 - 22:21 Uhr

Maximillian kurze Frage:

Wie hast du das mit den Popup Panels und dem Abdunkeln des Hintergrunds gelöst? Gibt es da nen fertigen Code oder ein Sample? Ich würd das auch gern in meinem Programm einbauen.

Mfg wizer

17.11.2010 - 16:50 Uhr

Liebe Community!

Es ist wieder einiges an Zeit vergangen und ich war nicht gerade untätig und hab natürlich weiter daran gearbeitet, das HelpTool zu verbessern. Die Netzwerk-Schicht und ein wirklich kleines Plugin System sind nun integriert. Auch wurde nahezu der gesamte Code umgeschrieben. Ich hoffe ihr seit mit dem Ergebnis zufrieden.

PS: Ich freue mich SEHR auf Rückmeldung 😃

Normalerweise geb ich das HelpTool per Setup weiter aber für euch hier die RAR <<Download>>
oder der Download im zweiten Beitrag

10.11.2010 - 10:17 Uhr

Hey das ist echt ein tolles Projekt! Funktioniert sehr gut. Du solltest du den Source auch Windows 7 kompatibel gestalten, da Dns.GetHostEntry immer eine Exception auslöst, da auch IPv6 Adressen geladen werden. Ich selbst würde auch die Klassen p2psocket und Protocol Chat unabhängig entwickeln, damit man sie für alle möglichen Vorstellungen nutzen könnte.

Lg wizer

27.10.2010 - 17:13 Uhr

Danke! Hat super funktioniert 😃

27.10.2010 - 13:15 Uhr

Tut mir leid, dass ich ein so altes Thema ausgrabe, aber ich habe eine Frage dazu.

Herbivore schrieb:

Damit sichergestellt ist, dass alle Änderungen im Windows-Explorer sofort wirksam werden, muss die Win32-Funktion SHNotifyChange aufgerufen werden.

Jedoch habe ich gesucht, leider aber nicht gefunden wie ich die Funktion aufrufen kann. Es wäre sehr nett , wenn mir jemand erklären könnte, wie ich das am besten anstelle.

Mfg wizer

06.06.2010 - 12:04 Uhr

Wenn du zum Beispiel zu dritt ein Spiel über Lan am laufen hast und es dabei keine Pause Funktion gibt (bsp. cod5) könnt ihr das Spiel einfach über den eingestellten Hotkey im Einstellungsdialog anhalten. Das müssen natürlich alle machen, da einfach der Prozess angehalten wird. Also entweder im Lan Modus oder wenn ihr ein Lan über Hamachi simuliert. In der zukünftigen Version wird zusätzlich noch ein Plugin für Hamachi integriert, mit dem man einstlellen kann, das das Spiel, auch wenn nur einer auf den Pause Hotkey klickt, auf allen PCs pausiert wird. Sozusagen also Remotecontrol. Das muss man natürlich bestätigen und vorher die anzuhaltenden PCs auswählen.

Lg wizer

02.06.2010 - 19:15 Uhr

Neuerster Stand:

Mit der Version 0.3.1.10 (erhältlich via Update) habe ich nun endlich den letzten nervigen Bug gefunden, der das Programm nach einiger Zeit zum Absturz bringen konnte.

Besonders für Lan-Spieler ist dieses Tool sehr interessant, da ihr damit auch in jenen Spielen, in denen es keine Pause Funktion gibt, das Spiel einfach anhalten könnt.

PS: Kommentare wären sehr nett 😉

Lg wizer

02.06.2010 - 16:47 Uhr

Nein nichts von beidem. Hab aber jetzt das Problem gefunden. Ich verwende global hooks in meinem Programm und anscheinend ist die global hook klasse von codeproject etwas fehlerhaft. Ich hab jetzt eine andere genommen und alles funktioniert wunderbar 😃

Lg

01.06.2010 - 14:13 Uhr

Hey ein Freund von mir bekommt immer wieder nach einiger Zeit diese Exception. Das Programm läuft im Hintergrund (notifyIcon). Ich kann mit der Exception leider gar nichts anfangen und hab auch schon gegoogelt, leider nichts sinnvolles gefunden 😦

Exception:
Message: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Source: System.Windows.Forms
StackTrace: bei System.Windows.Forms.UnsafeNativeMethods.PeekMessage(MSG& msg, HandleRef hwnd, Int32 msgMin, Int32 msgMax, Int32 remove)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms. UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run()
bei HelpTool.Program.Main(String[] args)

Könnt ihr mir vielleicht helfen?

Lg wizer

30.05.2010 - 15:36 Uhr

Hey arbeitest du noch an dem Updater?

Ich benutze ihn für eines meiner Projekte und bin überaus begeistert davon! Leider gibt es noch ein paar Kleinigkeiten die man ändern könnte. Beispielsweise würde ich gerne steuern können, ob der Dialog, dass das Update erfolgreich verlaufen ist, angezeigt werden soll oder nicht. Denn ich habe direkt nach dem kopieren der Dateien das Starten des Prozesses drinnen und dann überlappt sich deine Meldung mit meinem Programm. Könntest du das irgendwie einrichten?

Außerdem wie hast du es hinbekommen, dass bei der Sicherheitsabfrage, ob der Updater wirklich gestartet werden soll, nicht unbekannter Autor sondern dein Name steht?

Außerdem gibt es manchmal einen Bug, wenn ich bei einem Update einen Ordner im $appdata Verzeichnis erstellen lasse, dass der Inhalt, zb. Dlls die ich dazugeben, nicht gespeichert werden...

Mfg wizer

30.05.2010 - 15:25 Uhr

Liebe Community!

Ich möchte euch mein neuestes Projekt HelpTool vorstellen. Bei dem Tool handelt es sich um ein Programm, welches ein paar nützliche Funktionen für PC-Spieler oder Serveradministratoren bereitstellt.

Das Programm bietet folgende Möglichkeiten:*Black-Screen Funktion (Bildschirm abdunkeln für eine bestimmte Zeitspanne oder bis zur erneuten Betätigung der Auslösertaste) *Pause-Funktion (Entweder aktueller Prozess oder selbst gewählter Prozess) *Plugin-System (noch in Entwicklung aber schon recht solide) *Automatisches Updatesystem *Unterdrückung der Windows-Taste *Aktivierung jeder Funktion mit global keyboard hooks

Ein Bild spricht mehr als tausend Worte, deshalb seht selbst. (Bild im Anhang)

Voraussetzungen:*.NET Framework 3.5 *Administratorrechte (Aufruf der BlockInput-Function, welche beim BlackScreener eingesetzt wird, benötigt Admin-Rechte, siehe: Link MSDN)

Lg wizer

20.05.2010 - 19:59 Uhr

Tut mir leid für meine lange Abwesenheit hier im Forum. Zu dem Projekt:

Ich habe keinen Sourcecode mehr!! Sorry...

Ich hab alles selbst gezeichnet und zb ProgressBars selbst programmiert. Diese Dialoge bekommt man von nirgends her.

PS: Vielleicht erstellte ich das Projekt wieder neu, nur diesmal richtig 😉 (threading 😄)

Mfg
wizer

25.04.2008 - 16:00 Uhr

Hier mein Projekt: Klick mich

25.04.2008 - 15:57 Uhr

Source:

25.04.2008 - 15:57 Uhr

Hi. Sry hab wirklich vergessen im OnPaint zu zeichnen. Also hier jetzt das Beispiel und der Source!

mfg wizer

PS: Ja ob man gewonnen hat oder nicht lässt sich sicher leicht berrechnen. Ein paar Schleifen ... hatte jedoch bis jetzt noch keine zeit dafür ^^

25.04.2008 - 13:48 Uhr

Ausgehend von einem Thread den ich hier im Forum gelesen habe, bei dem es darum geht das o.g. Spiel so OO wie möglich zu erstellen, wollte ich nun meine Lösung präsentieren

Das ganze besteht aus einem abgeleitenden Panel welches folgende Einstellungen erlaubt: Reihen, Spalten, Rechtecke oder Kreise und GridLines.

Also der Code ist gesamt denke ich wirklich so OO wie es nur geht. Außerdem kann man unbrenzt Spieler hinzufügen!
Ahja das ganze hab ich mit GDI+ gemacht.

Bekannte Bugs:

  • Spielsteine verschwinden nach minimieren, maximieren (also wenn neu gezeichnet werden muss. Irgendwas hab ich da falsch gemacht ...)
  • Zurzeit wird noch nicht berrechnet ob man gewonnen hat (Hab bis jetzt noch keine Lösung dafür gefunden ...)

PS: Das Programm mit dem Source poste ich gleich (schreib grad von meinem Handy)

mfg wizer

25.04.2008 - 08:29 Uhr

Ja ok werd ich machen. War mir eigentlich nicht so wichtig, wollte primär nur Stöckchen helfen. Aber ist keine schlechte Idee. Mach ich aber erst dann wenn ich die Gewinn-Abfrage dabei hab!

mfg wizer

24.04.2008 - 23:54 Uhr

Hallo falls du noch immer nach einer Lösung suchst, solltest du mal mein Beispielprogramm anschauen. Dabei kann man im Panel zwischen runden und eckigen Steinen wählen. Du kannst die Reihen, Spalten und Größen angeben. Leider hab ich noch keine Funktion eingebaut die überprüft ob ein Spieler gewonnen hat, also Steine mit Schleifen vergleichen ...

Ich denke aber sonst ist das ganze recht nett ^^ Anzumerken ist, dass ich das grad schnell runter geschrieben hab also erwarte nichts besonderes!

mfg wizer

17.04.2008 - 19:40 Uhr

Und noch ein TestProgramm!

Viel Spaß!

17.04.2008 - 19:33 Uhr

Hi hab mich heute dran gesetzt und wie schon erwähnt zwei Fortschrittsformen programmiert. Also es gibt eine ProgressForm und ProgressBox. Die Funktionsweise ist ganz einfach jedoch unterscheiden sich beide Forms im Vergleich zur MessageBox08 und InputBox08 insofern das man diese nicht statisch aufrufbar sind! Also hier ein Beispielcode:

private void button3_Click(object sender, EventArgs e)
        {
            ProgressBox08 ProgressBox = new MessageBox2008.ProgressBox08(new string[2] { "Speicherstände werden gesichert ...", "Speicherständer werden gelöscht ..."}, "Datensicherung");
            ProgressBox.Show();
            Application.DoEvents();
            //Code like delete big file!
            System.Threading.Thread.Sleep(1000);
            ProgressBox.GetNextPoint();
            System.Threading.Thread.Sleep(1000);
            ProgressBox.GetNextPoint();
            //ChangeBackColor
            System.Threading.Thread.Sleep(1000);
            ProgressBox.RenameBox(1, "Fehler beim löschen", Color.Red);
            ProgressBox.Finish();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            ProgressBar08 ProgressBar = new MessageBox2008.ProgressBar08(new string[4] { "Speicherstände werden gesichert ...", "Speicherständer werden gelöscht ...", "AB", "CD" }, "Datensicherung");
            ProgressBar.Show();
            Application.DoEvents();
            //Code like delete big file!
            ProgressBar.GetNextPoint();
            System.Threading.Thread.Sleep(1000);
            ProgressBar.GetNextPoint();
            System.Threading.Thread.Sleep(1000);
            ProgressBar.GetNextPoint();
            System.Threading.Thread.Sleep(1000);
            ProgressBar.GetNextPoint();
            System.Threading.Thread.Sleep(1000);
            ProgressBar.Finish();
        }

mfg wizer 😁

EDIT 2 Bilder:

17.04.2008 - 19:33 Uhr

Also viel Spaß beim testen! Ahja die ProgressForm ist noch nicht ganz fertig!

14.04.2008 - 15:49 Uhr

OK neue version 0.21 released!

Changelog:
*Automatische Größenanpassung an den Text. Es gilt identes Verhalten wie die MessageBoxes von Microsoft *Kleiner Designfehler beseitigt *Die Forms wurden auf internal gesetzt und können jetzt nur über die statischen Klassen aufgerufen werden.

Außerdem hab ich noch vor weitere solcher Forms zu integrieren. Mich interessiert es nur wie hoch das interesse bei euch liegt z.B. eine ProgressForm d.h. mit verschiedenen Styles: Eine ProgressBar oder CheckBoxes die abgehackt werden.

Bekannte Bugs:

  • Es wird kein Text in der Taskbar angezeigt!

mfg wizer

08.04.2008 - 17:40 Uhr

Hallo ich hab ein Problem. Ich hab eine Form bei der ich aus bestimmten Gründen den Text (Title) leer lasse. Jedoch würde ich gerne in der Taskleiste schon gerne einen Text stehen haben. Weißt irgendwer wie man den Text der Form der Taskleiste anders machen kann?

mfg 😉

07.04.2008 - 21:51 Uhr

Danke was ich noch gerne integrieren würde:
1.Programm in der Taskleiste soll obwohl die Titelleiste leer ist einen Text anzeigen können. 1.Form passt sich automatisch an die Textgröße an (erledigt, kommt in die nächste Version) 1.Außerdem sollen die Forms in der DLL ausgeblendet werden, so dass man nur auf dei Klassen zugreifen kann, die das ganz eigentlich steuern, jedoch weiß ich nicht wie das geht 🙁 (erledigt, kommt in die nächste Version)

Wenn jemand von euch Lösungen für diese noch kommenden Features weiß dann bitte eine PN an mich 🙂

07.04.2008 - 21:39 Uhr

Hi könntest du vielleicht einen Proxy-Port indie DLL hinzufügen?

07.04.2008 - 19:56 Uhr

Hi ich hab ne kleine DLL gebastelt die moderne MessageBoxen auf die gleiche Weise wie das .Net Framework bereit stellt. Der Funktionsumfang:

MessageBox08 Beispiel:

MessageBox08.Show("Anzeigetext", "Titeltext", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, System.Drawing.Color.CornflowerBlue, MessageBoxOptions.RightAlign);

InputBox08 Beispiel:

InputBox08.Show("Anzeigetitel", "Anzeigetext", System.Drawing.Color.CornflowerBlue);

Die MessageBox08 ist denke ich aufgrund des Namens nicht weiter zu erklären und manche kennen vielleicht vom namen auch die InputBox, diese ist aus VB. Diese stellt ein Eingabefeld dar welche eine Anweisung für den User enthält.

Bilder:

siehe nächsten Beitrag

Viel Spaß damit!

mfg wizer

05.04.2008 - 12:57 Uhr

Tut mir leid ich hatte die pn nicht gesehen, war in der schule sry.

Also geht das mit Integer oder soll ich besser die vordefinierte Enum Klasse verwenden?

05.04.2008 - 11:14 Uhr

Aso so meinst du das, verstehe. Dann lass ich das mit int und akzeptiere nur die richtigen ints.

mfg

05.04.2008 - 10:49 Uhr

Hi ich ein Problem:

Ich möchte eine MessageBox nachprogrammieren und weiß nicht wie ich bei MessageBoxButtonsSelect, also welcher Button beim Öffnen Select() sein soll, immer nur die Buttons im Enum haben soll die auch in meinem flowlayoutpanel sind. Ich hoffe ihr versteht mich. Zurzeit hab ich als Notlösung einfach ein Int als Übergabewert, dies ist jedoch unschön, da man da auch eine höhere Zahl als man Buttons hat eingeben kann.

Schönen Tag noch

mfg wizer

19.03.2008 - 12:25 Uhr

Ok danke, also können mir die .. eigentlich helfen? also trägt das ".." irgendwie den pfad mit? egal ...

Jedoch bleibt das Problem, dass ich den Ordner nicht löschen kann obwohl nichts mehr drinnen ist!

Hier der Code:

public void DirectoryDelete(string dirname)
        {
            try
            {                
                Response(currenthost, WebRequestMethods.Ftp.RemoveDirectory).GetResponse().Close();
                currenthost = currenthost.Substring(0, dirname.Length);
            }
            catch (WebException ex)
            {
                throw new Exception(ex.ToString());
            }
        }

EDIT:

Hab den Fehler, hatte im Code ein return in einer Schleife welches eigentlich ein continue sein sollte! DANKE für die hilfe!

Und der Ordner den ich löschen möchte, der ist definitiv leer!

mfg und danke!

19.03.2008 - 11:02 Uhr

Hallo ich hab ein ziemlich eigenartiges Problem. Ich habe den folgenden Code:

private WebRequest Response(string host, string methode)
        {
            WebRequest request = FtpWebRequest.Create(host);
            request.Credentials = new NetworkCredential(username, password);
            request.Method = methode;
            return request;
        }

und hier der wichtige Teil:

public string[] ListallFiles()
        {
            string[] st;
            try
            {
                WebResponse response = Response(currenthost, WebRequestMethods.Ftp.ListDirectory).GetResponse();
                Stream s = response.GetResponseStream();
                using (StreamReader reader = new StreamReader(s))
                {
                    st = reader.ReadToEnd().Split('\n');
                }
                s.Close();
                response.Close();
                return st;
            }
            catch (WebException ex)
            {
                throw new Exception(ex.ToString());
            }
        }

Also wenn ich ListallFiles() aufrufe bekomme ich den Ordnerinhalt eines FTP-Servers zurück. Jedoch passiert es jedes mal das im string[] auf Falschwerte enthalten sind, konkret gesagt der

string[0] = "." und string[1] = ".."

Außerdem ist der letzte string wert im string[] immer "".

Kann mir einer sagen warum das so ist, denn ich habe auch eine Funktion die einen FTP-Ordner löscht und das geht nur wenn der Ordner leer ist! Jedoch meldet mir der Debugger das der Ordner nicht leer ist.

Ich hoffe ihr wisst was ich meine 🙂

mfg wizer X(

04.03.2008 - 23:06 Uhr

Hallo eine Frage hier im Board gibt es ja den Thread gemeinsame Aufgabeverwaltung. Dieser benutzt auf die .dll von dir. Nach dem Update startet er dann auch gleich automatisch. Nur mein Programm startet nach dem Update nicht wieder automatisch. Wie kann man das bewerkstelligen?

SUPER Programm!!!

mfg wizer

04.03.2008 - 20:21 Uhr

Wollte fragen ob ich mir den Source auch einmal anschauen dürfte. Sammle nämlich zur Zeit sehr viel aktive Erfahrung und dein Source würde mir da sehr weiterhelfen. Außerdem würde ich auch gleich noch eine weitere Funktion in das Programm einbinden, diese wäre ein hochladen von Aufgaben die bereits fertig sind. Man kann sich das so vorstellen.

Eine Aufgabe steht im Programm: --> Benutzer erledigt sie am PC --> lädt sie anschließend hoch um den Mitschülern die Möglichkeit zu bieten, sich kreative Ideen von der bereits fertigen Aufgabe zu holen! Man kann beim hochladen jedoch auch angeben ob man nur bestimmten Leuten erlauben möchte die Aufgabe zu sehen!

Wie findest du das? Ich könnte das gerne realisieren, wichtiger mir jedoch dass ich mir mal den Source anschauen dürfte, ich möchte nur Erfahrungen sammeln und mein Wissen erweitern.

mfg 👍

04.02.2008 - 21:11 Uhr
  • Wie ermittelt man den Namen des derzeit angemeldeten Benutzers, also den Benutzernamen von Windows?
System.Environment.UserName
  • Wie kann ich eine Datei über das LAN verschicken, so das der Empfänger die Datei aus der IP des Senders "herunterlädt"?

Also das zweite Problem ist eigentlich etwas komisch. Ein File im Internet geht ja über den WebClienten ich bräuchte halt genau das gleiche nur halt für LAN. Wüsste das wär was? Oder kennt ihr ne umfassende Library?

Das 3. Problem ist glaub ich kein Problem mehr ^^.

mfg wizer 👍

03.02.2008 - 19:01 Uhr

Hallo ich würde gerne ein Programm erstellen, welches ähnlich wie ein Client - Server funktioniert. Dieses Programm soll ständig im Hintergrund laufen und auf Signale von eines der Server warten. Beim durchdenken, hatte ich einmal folgende Probleme:

  • Wie ermittelt man den Namen des derzeit angemeldeten Benutzers, also den Benutzernamen von Windows?

  • Wie kann ich eine Datei über das LAN verschicken, so das der Empfänger die Datei aus der IP des Senders "herunterlädt"?

  • Die Programme müssten alle auf Basis von Peer to Peer funktionieren, d.h. es gibt keinen Server sondern jeder kann Dateien verschicken und jeder kann Dateien empfangen.

Als Beispiel nehme ich mir aus den Artikeln auf dieser Seite das Server - Client Modell.

Ich hoffe ihr könnt mir helfen 🙂

03.01.2008 - 21:38 Uhr

Ok danke! Die Vorschläge sind wirklich alle sehr gut! Was meinst du mit BeginEdit und EndEdit? Das sind ja Events?!?

mfg wizer

02.01.2008 - 13:19 Uhr

HI ich hab ein Problem, ich lese eine Ini ein und prüfe diese (wurde bereits in einem anderen Thread besprochen), dies funktioniert auch bereits SEHR schnell! Jedoch hab ich gemerkt das Ini-Daten schreiben SEHR lange dauert! Hier ist mal der Code:

IniFiler IF = new IniFiler(Application.StartupPath + "\\Modifikationen\\stringtable.ini");
                    foreach (string line in lines)
                        if (line.Contains("="))
                            IF.WriteString("LocAdmin_Strings", line.Split('=')[0], line.Split('=')[1]);
                    IF.Close();

Die IniFiler klasse hab ich hier aus dem Forum hab lediglich einen Punkt verändert:
statt ~IniFiler hab ich public void Close() eingebaut!

Den IniFiler Code könnt ihr hier finden: Klick mich!

Kann mir bitte jemand helfen wie das Ini schreiben schneller gehen könnte? (Es sind so circa 2000 Einträge ^^)

mfg wizer

28.12.2007 - 13:12 Uhr

Ok, danke für die Info. Hab jetzt gesehen, dass das vergleichen in 1 sekunden erledigt ist jedoch schreibe ich dann 2000 Einträge in eine Ini und das dauert anscheinend sehr lange, kann mir da jemand helfen wie das schneller gehen könnte?

Ich benutze die IniFile Klasse die ich hier mal im Forum gefunden habe!

string[] lines = File.ReadAllLines(dest + "\\stringtable.ini", Encoding.Default);
                    IniFile IF = new IniFile(g3pfad + "\\Mods\\stringtable.ini");
                    foreach (string line in lines)
                        if (line.Contains("="))
                            IF.WriteIniValue("LocAdmin_Strings", line.Split('=')[0], line.Split('=')[1]);

und hier noch die IniFile Klasse die ich leicht erweitert habe:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.IO;

namespace G3ModStarter
{
    public class IniFile
    {
        public string path;

        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section,
          string key, string val, string filePath);

        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section,
          string key, string def, StringBuilder retVal,
          int size, string filePath);

        public IniFile(string INIPath)
        {
            path = INIPath;
        }

        public void WriteIniValue(string section, string key, string value)
        {
            WritePrivateProfileString(section, key, value, this.path);
        }

        public string ReadIniValue(string section, string key)
        {
            StringBuilder temp = new StringBuilder(1024);
            int i = GetPrivateProfileString(section, key, "", temp, 1024, this.path);
            return temp.ToString();
        }

        public void DeleteIniSection(string section)
        {
            string text = File.ReadAllText(path, Encoding.Default);
            int index = text.IndexOf("[" + section + "]");
            int length = text.IndexOf("[", index + 1) - index;
            if (length + index < 0)
                length = text.Length - index;
            text = text.Remove(index, length);
            File.WriteAllText(path, text, Encoding.Default);
        }
        public int CountIniSections
        {
            get
            {
                int pos = 1;
                string text = File.ReadAllText(path, Encoding.Default);
                int count;
                for (count = 0; pos > 0; count++)
                {
                    pos = text.IndexOf("[", pos) + 1;
                }
                return count;
            }
        }

        public void RenameIniSection(string vorher, string nachher)
        {
            string text = File.ReadAllText(path, Encoding.Default);
            text = text.Replace("[" + vorher + "]", "[" + nachher + "]");
            File.WriteAllText(path, text, Encoding.Default);
        }

        public void ClearIni()
        {
            File.WriteAllText(path, null);
        }

        public void DeleteIni()
        {
            if (File.Exists(path))
                File.Delete(path);
        }
    }
}
19.12.2007 - 15:08 Uhr

Ich glaub du hast mich falsch verstanden, ich meine wo lese ich etwas immer wieder neu ein?

Die while schleife liest ja immer nur eine Zeile ein!

19.12.2007 - 14:58 Uhr

Warum neu einlesen? Über eine while Schleife geht das ganze so ja viel schneller, da immer nur die eine Zeile eingelesen wird und dann weiter gemacht wird! Oder sehe ich das falsch? Habs nämlich jetzt auch mit "File.ReadAllLines()" gemacht und dann über "foreach" und da dauert es deutlich länger!

mfg wizer 👍