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