begin process at 2008 07 21 01:16:57
1 213 538 membres
7 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EDITEUR DE SCRIPT .BAT (PROCESS, XML)


Information sur la source

Description

Pour travailler des concepts CSharp.net (VStudio 2003), j'ai pensé à un éditeur de fichier batch. Celui-ci réuni les classe Diagnostic, Process, Thread, Xml. J'ai essayé la coloration du code (tâche assez compliquée). Un fichier Xml sert de base de données modifiable à volonté.
(Je conseille la désactivation de la coloration en modif car pas très fonctionnelle) et à ce propos je vous demande conseil quant à la manière à suivre pour ce genre de fonction (analyser du rtf à la volée). Merci d'avance pour votre indulgence.

Conclusion

Cette application est un test de plusieurs concepts CSharp.net. A cause de l'utilisation d'un thread secondaire qui fait des appels sur un controle WinForm, il se peut que des NullReferenceException surviennent aléatoirement. En effet le framework dit qu'un delegate doit être utilisé pour ce genre de problème (Marshalling avec controle.BeginInvoke(...)) car seul le thread principal doit dialoguer avec les controles WinForm. Je suis en train de chercher dans ce sens.
PS : Le fichier xml et le rep Outils doivent être dans le rep. courrant.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de leproc le 16/04/2006 19:12:24

    Bravo pour la coloration syntaxique un vrai casse tête

  • signaler à un administrateur
    Commentaire de yann_lo_san le 21/04/2006 19:38:25

    Heuu, ça m'aide pas vraiment LEPROC !
    Mais merci quant même.

  • signaler à un administrateur
    Commentaire de leprov le 23/05/2006 22:22:12

    tiens des réponses avec des pseudos tres proches.... ;)
    donc pour ton probleme de modification de ton controle via un thread secondaire, petite explication :

    un thread ne peux modifier une form ou un de ses composants que si cest ce thread qui a lancé la fenetre....un exemple tout simple de comment modifier la fenetre dans un thread secondaire (en ne mettant qu'une partie du code). imaginons une form qui contienne une textbox (et cest tout)

    class MaForm : Windows.Form
    {
    //création d'un délégué de la fonction prévu pour le callback
    private delegate void FonctionModifInterfaceCallBack();


    public MaForm()
    {
      Thread MonThread = new Thread(FonctionModifInterface);
      MonThread.Start();
    }

    //méthode threadsafe
    void FonctionModifInterface()
    {
      //vérification du thread. si on est pas ds le thread qui a lancé la fenetre, cela renvoi true
      if (this.textbox1.InvokeRequired())
      {
       //création d'une instance du délégué de callback
       FonctionModifInterfaceCallback d =
         new FonctionModifInterfaceCallback(FonctionModifInterface);
       //appel du callback. la fonction s'appelle elle meme dans le thread principal et passe alors
       //dans le else
       this.Invoke(d);
      }
      else
      {
       //on est dans le thread principal et la textbox peut etre modifiée
       this.textbox1.text = "coucou";
      }
    }
    }


    je suis pas sur a 100% du code. s'il y a erreur j'edite ca demain ;)
    petite précision : si la fonction possède des parametres, il faut changer une partie du code. par exemple, si la fonction avait été
    void FonctionModifInterface(int a, string b)

    il faut modifier le code pour avoir ceci :

    FonctionModifInterfaceCallback d =
         new FonctionModifInterfaceCallback(FonctionModifInterface);
    object[] Params = new object[2];
    object[1] = a;
    object[2] = b;  
    this.Invoke(d, Params);  

    ce qui se passe :
    on vérifie que le control a été créé dans le thread courant (invokerequired)
    si cest le cas, on prépare a lancer la fonction dans le thread qui l'a créé (avec la méthode callback)
    on lance cette méthode dans le thread qui a créé le control (control.invoke, ou un de ses parents)
    si on est bien dans le bon thread, on modifie le controle


    j'ai pas de compilo sous la main et jai plus le code exact en tete, mais a priori si tu crée une appli avec une form nommée MaForm contenant une textbox nommée textbox1, ca devrais compiler et fonctionner (je pense, je vérifierais ca demain et corrigerais si besoin est).
    en bref, toute méthode qui risque d'etre appelée dans ton thread secondaire doit etre rendu thread safe d'une manière équivalente.
    en éspérant que ca t'aide (et que je n'ai pas posté ca trop tard ^^)

  • signaler à un administrateur
    Commentaire de yann_lo_san le 25/05/2006 21:19:14

    C'est très clair, LEPROV, merci.
    J'étais passé à autre chose mais cette présentation 'threadSafe' me convient tout à fait.
    Tu codes dans ta tête, sans compilateur et sans F1 !!!
    C'est impressionnant.
    Bonne continuation...

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS