Laden...
C
Benutzerbeschreibung

Forenbeiträge von chavez Ingesamt 252 Beiträge

25.12.2008 - 19:52 Uhr

Das mit dem Callback funktioniert leider in meinem Fall nicht.
Ich arbeite alle Tracks einer Disc ab und schreibe Informationen darüber in ein XML-Dokument.
Hier der Aufbau der Methode:


//Alle Album-Infos werden ins XML geschrieben.

//Alle Tracks werden abgearbeitet
foreach (Track track in disc.Tracks)
{
   //Alle Track-Infos werden ins XML geschrieben(Interpret, Titel, Dauer,..)

   //Hier passiert der Aufruf fürs Encoding

   //Hier wird der Pfad zum File und der MD5-Hash ins XML geschrieben.
}

Im Callback habe ich ja dann keinen Zugriff mehr auf das XML-Dokument(ok, das könnte ich außerhalb der Methode deklarieren) und weiters werden dann ja alle Tracks sofort encodiert, da die foreach ja sofort für alle Tracks durchlaufen wird.
Mein Ziel ist, dass 1 Track nach dem anderen encodiert wird und die GUI dabei nicht blockiert. Dafür gibt es aber anscheinend keine andere Lösung bzw will mir keine einfallen als die while Schleife und Application.DoEvents()?

25.12.2008 - 15:46 Uhr

Also ich habe folgendes Szenario:
Ein Programm das mir WAV-Files in alle möglichen Formate konvertiert. Damit die GUI nicht blockiert rufe ich das Ganze asynchron auf. Jezt will ich bis zum Ende des asychronen Aufrufes warten ohne dass die GUI blockiert. Erst dann soll der nachfolgend Code ausgeführt werden.
Bisher löse ich das folgendermaßen:


        //Hier passiert vorher etwas

        EncodeAudioHandler eah = new EncodeAudioHandler(EncodeAudio);
        IAsyncResult result = eah.BeginInvoke("src", "dst", "codec -params", null, null);
        while (!result.IsCompleted)
        {
          Application.DoEvents();
          Thread.Sleep(100);
        }

        //Hier passiert auch noch etwas, allerdings erst nach dem Encoden

Die while Schleife mit den Application.DoEvents() gefällt mir ganz und gar nicht.
Gibt es da eine bessere/elegantere Lösung?

Muss man EndInvoke eigentlich immer aufrufen? Wenn ich keinen Rückgabewert erwarte, dann lasse ich das immer weg. Laut diesem MSDN-Artikel sollte man immer EndInvoke() aufrufen?

08.12.2008 - 16:47 Uhr

Schon mal mit String.Compare() versucht?

04.12.2008 - 06:48 Uhr

Dazu hätts nichtmal Google gebraucht 😉 Ein Blick in die MSDN und du siehst welche Paramter man der Process.Start() Methode mitgeben kann.

25.11.2008 - 18:11 Uhr

Hast du Form.TopMost jetzt schon probiert? Warum immer kompliziert wenn es uU auch einfach geht. Ich habe das ganz mal mit Piontifex2(derzeit das einzige Spiel, das ich am Lappi installiert hab) probiert und da klappt das einwandfrei.

25.11.2008 - 07:20 Uhr

Eventuell ist Form.TopMost genau das was du suchst.

12.11.2008 - 19:38 Uhr

Einfach in der Konsole bzw Terminal "mono pfadZurAnwendung/anwendung.exe" dann startet das programm. Wenn du vorher in das Verzeichnis wechselst wo die Anwendung liegt, dann reicht "mono anwendung.exe"

03.11.2008 - 13:31 Uhr

pack deine controls in eine groupbox. als dock wählst du top aus. wenn du dann bei einzelnen grupboxen visible auf false stellst rutschen die anderen automatisch nach.

edit: tjo da war ich wohl ne spur zu langsam

31.10.2008 - 11:14 Uhr

Bei 10.5 wird X11 mit installiert. Für GUIs gibt es mehrere Möglichkeiten:

Also bei meinem neuen Mac mini war dies nicht der fall.

noch ein interessanter link zum thema Gui-Toolkits

31.10.2008 - 09:24 Uhr

Ja Mono liegt als universal-Binary vor(also PPC und Intel, aber wenn ich michr richtig erinnere, war das doch von anfang an schon so) und unterstützt offiziell 10.4 und 10.5. Es soll aber auch auf älteren Versionen laufen.
Läuft auch soweit alles sehr stabil. Einzig die Windows forms sind ein K(r)ampf. Teilweise einfach sporadische Abstürze oder Messageboxen lassen sich nicht mehr wegklicken etc.
Weiters wird für die Windows Forms X11 benötigt. Die ist nicht automatisch installiert. Das muss man manuell machen. Weiters sehen die Windows Forms sehr bescheiden aus.
Ich kann bei GUI nur zu wx.net(wxwidgets) raten. Somit hat man das selbe Look&Feel am Mac wie alle anderen Programme. Wenn man sich erst eingewöhnt hat, dann kann man auch da relativ leicht eine Gui basteln.

31.10.2008 - 09:05 Uhr

nur so als Info. Du solltest besser den User und Pass entfernen, damit keiner auf blöde Gedanken kommt.

31.10.2008 - 07:35 Uhr

Vergiss den BinaryReader, der ist nicht notwendig.
Du hast ja bereits den Stream, also Image.FromStream() aufrufen und fertig.


Bitmap Img = Image.FromStream(webResponse.GetResponseStream());

10.10.2008 - 06:41 Uhr

Wie wärs wenn du danach einfach ein Refresh() machst. Das sollte das Problem beheben und alle Items angezeigt werden.

06.10.2008 - 16:57 Uhr

Schade. Leider (noch) nicht für MAC verfügbar.

24.09.2008 - 06:48 Uhr

Crosspostings sind nicht gerade die feine Art. Gleich in 2 weiteren Foren(hier und hier) die selbe Frage stellen ist meiner Meinung doch sehr dreist.

14.09.2008 - 08:43 Uhr

Wie wärs wenn du den WebClient verwendest? Da läst sich das sehr einfach lösen.


WebClient wc = new WebClient();
using (MemoryStream ms = new MemoryStream(wc.DownloadData("http://www.mycsharp.de/wbb2/images/header/header_logo_3.gif")))
{
  pictureBox1.Image = Image.FromStream(ms);
}

19.08.2008 - 11:03 Uhr

Ein Buch zum Thema OOP gibt es ebenfalls von galileo als Openbook: Praxisbuch Objektorientierung

15.07.2008 - 20:23 Uhr

schau dir mal den Thread an. Speziell die letzten 4 Posts. Evtl funktioniert das mit den anonymen Delegaten auch im CF.

Edit: Ok, das hat herbivore bereits in seinem Post vorgeschlagen. Hab ich total überlesen. 🤔

15.06.2008 - 19:36 Uhr

also es gibt bereits das property listviewitem.checked. die checkbox kannst du im designer anzeigen lassen. somit hast du vor jedem item eine checkbox. falls dir das reicht.

13.06.2008 - 13:09 Uhr

Geht eigentlich ganz einfach:

Process.Start("mailto:beispiel@example.org");

Weitere Optionen findest du hier

13.06.2008 - 08:52 Uhr

Ich sags ja nur ungern aber Cordoba 78 wird sich nach fast 30 Jahren wiederholen. Freu mich auf das "Endspiel" am Montag.

05.06.2008 - 11:19 Uhr

Laut deinem ersten Post konntest du ja bereits eine Verbindung herstellen. Nur das Absetzen des Commands hat nicht funktioniert. Also stimmt jetzt vermutlich etwas am connection string nicht.
Aber zurück zu meiner Frage: Hast du auch sicher die Tabelle angelegt?

05.06.2008 - 07:43 Uhr

Hast du auch eine entsprechende Tabelle angelegt? Für mich sieht es aufgrund der Fehlermeldung "SQLite error: no such table test" danach aus.

29.05.2008 - 12:21 Uhr

du zählst einfach wieviele *.inf dateien in dem verzeichnis vorhanden sind und erhöhst diese zahl um 1 und nimmst sie einfach in den Dateinamen auf.

28.05.2008 - 13:38 Uhr

Ist ein kleiner bug drin. Substring klappt nicht immer richtig. hier die korrigierte version.


string path = @"c:\dir";
foreach (string dir in Directory.GetDirectories(path, "*", SearchOption.AllDirectories))
{
  Directory.CreateDirectory(@"c:\dir1" + dir.Substring(path.Length));
}

28.05.2008 - 13:07 Uhr

foreach (string dir in Directory.GetDirectories(@"c:\testdir", "*", SearchOption.AllDirectories))
        Directory.CreateDirectory(@"c:\testdir2" + dir.Substring(4));

Problem gelöst.

27.05.2008 - 19:48 Uhr

Alle Patterns gibts bei dofactory.com als C# Implementation.

26.05.2008 - 18:22 Uhr

Weil es einfach auf Client-Seite so im Resolver im OS verankert ist. Also schickt mein DNS Resolver ein rekursives Query an den DNS Server von meinem Provider bzw an den den ich eingetragen habe. Wie dieser DNS Server weiter vorgeht hängt dann von der Konfiguration. Außerdem

Thus, if a DNS server does not have the requested information when it receives a recursive query, it queries other servers until it gets the information, or until the name query fails.
>

Zeig mir bitte mal wie du ein iteratives Query absetzt bzw. deinen Resolver/Webbrowser dazu veranlasst?

26.05.2008 - 17:07 Uhr

Klar werden die meisten Anfragen mittels Cache beantwortet. Ich wollte auch nur die theretische Vorgehensweise demonstrieren.
Meiner Meinung ist das ein wenig verwirrend beschrieben auf Wikipedia. Hier unter Resolver sthet es besser(richtig) beschrieben.
Der Browser entscheidet nicht, aber er kann nur eine rekursive Anfrage starten und keine iterative(Genau genommen startet eben der Resolver die Anfrage und nicht der Webbrowser). Er wartet einfach auf eine Antwort. Sprich ich brauche die Ip für www.mycsharp.de

26.05.2008 - 16:33 Uhr

Also dann dürfte Exception Hunter genau das sein was du suchst.

26.05.2008 - 16:25 Uhr

Also eine Anfrage läuft folgendermaßen ab:
Es gibt eine Rekursive Anfrage(diese macht zb dein Broswer): Also gib mir mal die Ip zu folgendem Namen oder umgekehrt.
Eine iterative Anfrage. Diese werden von anderen Servern gestartet. Dieser handelt sich soweit voran bis er die IP hat. Also er stellt immer wieder Anfragen an weitere DNS-Server.
Es gibt DNS-Server die für die jeweilige Zone autorativ sind. Sprich nur diese können dir Auskunft geben.
So und jetzt die Abfrage im Detail. Du tippst www.mycsharp.de in den Browser. Du bzw dein Browser stellt eine rekursive Anfrage an den DNS Server deines Providers. Falls die gesuchte Ip zufällig vom selben Provider ist, dann erhältst du direkt die IP vom DNS Server. Ansonsten fragt er bei einem der 13 Root server an. Der liefert dem DNS-Server deines Providers zurück: DIe IP für www.mycssharp.de kenne ich nicht aber wende dich an den DNS-Server von der TLD .de. So nun fragt er beim Server für .de nach der ip für www.mycsharp.de. Dieser antwortet wieder mit das kenne ich nicht aber frage mal beim zuständigen server für mycsharp.de. Dieser antwortet nun endlich mit der IP und sagt ja www.mycsharp.de kenne ich bin für diese zone autorativ und liefert die gewünschte ip.
Also in wirklichkeit gibt es viele DNS-Server. Weil nur mit den 13 wäre das nie und nimmer zu schaffen.

25.05.2008 - 21:15 Uhr

Also in den Eventargs steht in welcher Column und Row der Klick auftrat. Also machst du einfach eine Überprüfung:


if(e.Column == Spaltennummer der Button-Spalte)
{
   //Hier dein Code
}

25.05.2008 - 20:08 Uhr

Wie wärs wenn du überprüfst ob der Klick in der "Button-Spalte" auftrat. Somit ignorierst du dann alle ContentClicks die nicht in der betreffenden Spalte auftreten.

25.05.2008 - 16:08 Uhr

Also uns wurde im Studium immer gesagt Datenbankzugriffe so kurz als möglich zu halten, um locks etc zu verhindern. Also lieber einmal öfter Verbindung aufbauen als die ganze Zeit offen zu halten.

23.05.2008 - 15:54 Uhr

Was für dich auch nützlich sein könnte: Threads mit mehreren Parametern
Somit musst du deine Paramter nicht in object-Array packen, sondern kannst gleich die Parameter übergeben und zudem auch noch typesafe.

22.05.2008 - 22:04 Uhr

Du musst den Typ von object auf int ändern bei der Add methode. Nur wird dir das leider auch nicht helfen, da:
Der geerbte Member "System.Collections.Generic.List<int>.Add(int)" kann nicht überschrieben werden, weil er nicht als "virtual", "abstract" oder "override" markiert ist.
Außerdem kann die Zuweisung int i = base.Add(value); auch nicht funktionieren, da Add void zurückliefert.
Möglichkeit 1:


public class StatementList : List<int>
  {
    public event EventHandler Changed;

    protected virtual void OnChanged(EventArgs e)
    {
      if (Changed != null)
        Changed(this, e);
    }

    public new void Add(int value)
    {
      base.Add(value);
      OnChanged(EventArgs.Empty);
    }

  }

Möglichkeit 2:


  public class StatementList : List<int>
  {
    public event EventHandler Changed;

    protected virtual void OnChanged(EventArgs e)
    {
      if (Changed != null)
        Changed(this, e);
    }

    public new int Add(int value)
    {
      base.Add(value);
      OnChanged(EventArgs.Empty);
      int i = 0;
      return i;
    }

  }

22.05.2008 - 13:39 Uhr

Es geht sogar noch einfacher: File.AppendAllText()

17.05.2008 - 07:45 Uhr

Also mit System.Web bist di schon richtig gelegen. Das mit den Sonderzeichen klappt mittels HttpUtility.UrlDecode()

16.05.2008 - 19:26 Uhr

Wie wärs mit Environment.Exit Methode. Evtl entspricht das deinen Vorstellungen.

16.05.2008 - 17:55 Uhr

So ich hab dir mal ein kleines Testprog angehängt.
Du rufst es so auf:
ParamTest.exe "c:/dokumente und einstellungen/all users/dokumente"
wenn du es so aufrufst
ParamTest.exe c:/dokumente und einstellungen/all users/dokumente
dann zeigt er die nur c:/dokumente an

Ich hoffe du verstehst jetzt wie ich das meine.

16.05.2008 - 17:33 Uhr

Ok. Das verstehe ich jetzt nicht. Aber du übergibst ja deinem programm ja schon den pfad. Dieser wird aber laut deinen Angaben beim Leerzeichen gesplittet. Um genau das zu verhindern musst du den Pfad in Anführungszeichen übergeben.
also anstatt
prog.exe c:/dokumente und einstellungen/all users/dokumente
machst du es so
prog.exe "c:/dokumente und einstellungen/all users/dokumente"
Somit enthält args[0] den kompletten pfad und nich nur c:/dokumente

16.05.2008 - 17:03 Uhr

Du musst den Parameter in "" setzen. Also "c:\dokumente und einstellungen..." Dann klappt das.

15.05.2008 - 23:06 Uhr

Man kann durchaus mehrere parameter mitgeben. siehe Threading in C#

12.05.2008 - 23:35 Uhr

eine kleinigkeit passt nicht ganz. die variable bla muss außerhalb von btn_mdto5pw_Click deklariert werden, denn sonst kann man in btn_stop_Click nicht darauf zugreifen.

edit. tjo da war ich ein wenig zu schnell. 😉 haste ja bereits richtig editiert.

09.05.2008 - 07:33 Uhr

Hab zwar keine richtige Lösung dazu, aber du kannst die ja eine Art Hybrid-Lösung basteln. Du checkst einfach ob es sich um eine AOL Email-Addy handelt und schickst diese Email eben via opensmtp. Für alle anderen kannst du System.Net.Mail verwenden.

06.05.2008 - 13:39 Uhr

Hört sich für mich nach nem Greedy-Algorithmus an.

05.05.2008 - 21:56 Uhr

aber vllt gibts ja auch eine rundungs methode bei c# das weiß ich jetzt nicht

Klar gibts die Math.Round()

edit: tjo da war ich wohl ne spur zu langsam

05.05.2008 - 17:37 Uhr

Klar. Das ist in wenigen zeilen erledigt. Du brauchst dazu Process.Start(). Diese ruft den Lame MP3 Encoder mit den passenden Parametern auf. Das wars.

05.05.2008 - 07:21 Uhr

Also für c# gibts nen Wrapper für SQLite.

25.04.2008 - 14:30 Uhr

Wäre eine Möglichkeit, aber durch was soll ich die Umlaute ersetzen. Außerdem habe ich ja bereits die verschiedenen Encodings ausprobiert und abhängig vom Encoding werden ja die Umlaute, Sonderzeichen, etc auch ersetzt.