cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 2008
-
7 avril 2006 à 07:40
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 2008
-
7 avril 2006 à 17:10
Salut tout le monde,
Je suis en train de travailler sur une application qui prend des captures d'écran de pages web. J'utilise pour cela le contrôle WebBrowser (avec la fonction DrawToBitmap). Le problème, c'est qu'il faut attendre le chargement de la page web avant de dessiner celle-ci sur un bitmap. J'ai donc penser à utiliser des Thread avec la classe ManualResetEvent pour arrêter le déroulement de mon programme jusqu'à ce que la page soit bien chargée. Voici un bout de mon code :
private string url null;<?xml:namespace prefix o ns = "urn:schemas-microsoft-com:office:office" />
private WebBrowser webBrowser = new WebBrowser();
private Bitmap bmp = null;
public ManualResetEvent mre = new
ManualResetEvent(
false)
;
public Bitmap TakeScreenShot()
{
Thread t = new Thread(new ThreadStart(_TakeScreenShot));
t.Start();
if (mre != null) mre.WaitOne();
return bmp;
}
private void _TakeScreenShot()
{
webBrowser.Navigate(url);
this.webBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
//pour que mon thread ne se termine pas tout de suite
bmp = new Bitmap(webBrowser.Bounds.Width, webBrowser.Bounds.Height);
webBrowser.BringToFront();
webBrowser.DrawToBitmap(bmp, webBrowser.Bounds);
if (mre != null) mre.Set();
}
J'ai l'impression que mre.Set ne se déclenche jamais :(
Je suis vraiment débutant avec les threads alors si vous pouvez m'aider parce que ça fait 3 heures que j'essaie toutes les combinaisons possibles.
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 7 avril 2006 à 09:10
Hello,
Etant donné que tu as un event qui te permet de savoir quand le chargement de la page est terminé, je ne comprend pas pourquoi tu as besoin de thread pour faire cette action ?!
Le morceau de code fait exactement ce que tu veux (à une petite exception prêt) :
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 7 avril 2006 à 17:10
J'ai lu ces articles et le programme marche très bien.
Ta question : Pourquoi tu as besoin d'un thread pour faire cette action?
Réponse : J'aurais bien aimer éviter d'en utiliser, le problème, c'est que je veux insérer cette fonction dans une page asp.net dont l'execution est linéaire. Quand je m'enregistre auprès de l'event, mon application continue son déroulement même si l'évenement en question ne fut pas encore déclenché.
Il faut donc que je bloque l'execution de mon programme jusqu'à ce que l'événment se déclenche et ensuite continuer l'execution.
C'est assez tordu mais j'ai l'impression que c'est le seul moyen.