Salut tlm,
j'ai codé un service windows en C# 2.0 qui a une icone dans le systray quand il est démarré. J'ai bien pris soin d'activer via du code C# "Interagir avec le bureau" lors de l'install, donc de ce coté pas de souci, mon service tourne bien. J'ai l'icone du systray qui apparait, le menu contextuel, etc... tout fonctionne nickel.
A un point pres. Ah bah oui, si je pose une question, c'est que quelque chose cloche qd meme ^^
quand je double clicke sur mon icone, je veux pouvoir lancer le navigateur par défaut. Seulement, ca met 30 secondes (pile poil) avant de lancer le brouteur. Hors du service c'est instantanée, je ne comprends pas pourquoi ca freeze.
Voila un peu de code pour détailler :
Dans le service lui meme :
m_worker est un background worker qui surveille un répertoire (avec un timer positionné sur 1 seconde).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 protected override void OnStart(string[] args) { m_worker.WorkerSupportsCancellation = true; m_worker.DoWork += new DoWorkEventHandler(m_worker_DoWork); m_worker.RunWorkerAsync(); Thread v_guiThread = new Thread(new ThreadStart(StartGUI)); v_guiThread.IsBackground = false; v_guiThread.Priority = ThreadPriority.Highest; v_guiThread.Start(); } private void StartGUI() { Application.Run(new MainForm(null)); }
v_guiThread est le thread chargé de démarrer l'interface graphique (au début c'etait aussi un background worker, mais ca change rien en fait).
Et dans le code la MainForm, sur le double click de l'icone, j'ai :
p_url est l'url à ouvrir (ca ourvre automatiquement un navigateur comme ca ^^).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Process p = new Process(); p.StartInfo.FileName = p_url; p.StartInfo.ErrorDialog = true; p.StartInfo.CreateNoWindow = false; Stopwatch v_chrono = new Stopwatch(); v_chrono.Start(); p.Start(); v_chrono.Stop();
Le chrono est la pour mesurer le temps, et c'est bien le p.Start() qui prends 30 secondes avant de rendre la main.
Si quelqu'un a une idée, qu'il n'hésite pas
Merci d'avance
Edit : y'a un détail bizarre qd meme, c'est que si je met ce process.start dans le code (sans passer par un double click, par exemple si je le mets sur le onstart), ca lance IE tout de suite. C'est vraiment comme si c'etait le fait de passer par une interface graphique qui bloquait le lancement du process...(d'ailleurs pourquoi 30 secondes, ca sors d'ou cette valeur ??)
Partager