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:
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:
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