IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

redemarrer un thread depuis un autre thread


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 54
    Points : 40
    Points
    40
    Par défaut redemarrer un thread depuis un autre thread
    Bonjour tout le monde,

    actuellement je code une fonction qui doit ouvrir un document excel. Cependant, il arrive que dans ce document excel il y ait des liens vers d'autre source de donnée. Et quand c'est le cas, mon programme attend que je clic sur l'un des boutons de la fenetre qui s'ouvre et la suite du programme ne s'effectuera que lorsque j'ai cliqué.

    Or ces liens ne sont pas prévus dans l'éxecution normale du batch, je cherche donc à mettre en place un système de timeout autour de ma fonction d'ouverture de fichier.

    Le principe que j'ai fait pour le moment est de créer un nouveau thread dans lequel il y a ma méthode d'ouverture de fichier :

    voici le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     static void Main(string[] args)
            {
     
    ExcelFile efFile = new ExcelFile();
                Thread InstanceCaller = new Thread(
                    new ParameterizedThreadStart(
                   efFile.Open
                    ));
     
     String[] stParameter = { "C:\\monchemin\\monfichier.xls", "OngletExcel" };
                InstanceCaller.Start(stParameter);
     
    }

    et voici le code de la fonction d'ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    ublic void Open(object oParameter)
            {
                String[] stParameter = (String[])oParameter;
                string xlsFileName = stParameter[0];
                string WorksheetName = stParameter[1];
                try
                {
                    //On récupère le nom de l'expéditeur dans le nom du fichier
                    // Ouvrir Excel
                    Process[] ExcelProcessesBefore = Process.GetProcessesByName("EXCEL");
                    m_Application = new ApplicationClass();
                    Process[] ExcelProcessesAfter = Process.GetProcessesByName("EXCEL");
                    m_ProcessId = GetProcessId(ExcelProcessesBefore, ExcelProcessesAfter);
                    m_Application.DisplayAlerts = false;
     
                    // Ouvrir le classeur
                    //System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US", true);
                    //ci = System.Threading.Thread.CurrentThread.CurrentCulture;
                    //m_Workbook.GetType().InvokeMember("Add", System.Reflection.BindingFlags.InvokeMethod, null, m_Workbook, null, ci);
     
                    m_Workbook = m_Application.Workbooks.Open(xlsFileName, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                    Type.Missing, Type.Missing, Type.Missing);
                    //System.Threading.Thread.CurrentThread.CurrentCulture = ci;
     
     
                    // Sélectionner la feuille
                    if (string.IsNullOrEmpty(WorksheetName))
                    {
                        // Sélectionner la feuille active
                        m_Worksheet = (_Worksheet)m_Workbook.ActiveSheet;
                    }
                    else
                    {
                        // Sélectionner la feuille donnée
                        m_Worksheet = GetWorksheet(WorksheetName);
                    }
                    //tout est ok reveil du thread
                    ExcelOK = true;
     
     
                }
     
                catch (Exception exc)
                {
     
                 }
            }
    je voudrais donc que lorsque la variable ExcelOK passe à true ou lorsque 10 minutes se sont écoulés que le thread principal reprenne la main sur programme

    je vous remercie d'avance

  2. #2
    Membre averti

    Inscrit en
    Septembre 2004
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 105
    Points : 339
    Points
    339
    Par défaut
    Il existe plusieurs solutions possibles. Regarde dans la documentation les classes suivantes: System.Threading.WaitHandle et System.Threading.Timer.

Discussions similaires

  1. Lancé un thread SwingWorker depuis un autre thread SwingWorker
    Par romuluslepunk dans le forum EDT/SwingWorker
    Réponses: 5
    Dernier message: 14/03/2009, 18h58
  2. Threads. Peut-on appeler la méthode d'un thread depuis un autre thread ?
    Par Pierre8r dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 05/12/2008, 11h48
  3. CreateMDIWindow depuis un autre thread
    Par DjiZ dans le forum Windows
    Réponses: 2
    Dernier message: 03/12/2008, 10h01
  4. Réponses: 3
    Dernier message: 19/03/2008, 09h38
  5. [VB.NET/2.0] Comment MAJ ListBox depuis un autre Thread ?
    Par ShaVo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/02/2006, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo