none
problème thread RRS feed

  • Discussion générale

  • bonjour,

    j'ai un problème avec les threads. j'ai cherché des tuto sur son utilisation tel que :

    site du zero

    msdn

    albahari

    mais je n'ai pas réussit a résoudre mon problème.

    je commence l'explication de mon programme. en fait mon programme utilise la webcam pour prendre des photos. la webcam met un peut trop de temps pour démarrer (1 à 3 secondes) et aussi me fait ramé mon application (même écrire sur les textBox rame). donc je me suis dit de faire un thread a part pour qu'elle ne bloque pas l'application. mais je suis tombé sur un problème que je n'arrive pas a résoudre. je vous montre le bous de code que j'ai réalisé :

    public partial class MainWindow : Window
        {
            private WebCam webcam;
            public Thread traitement;
    
            public MainWindow()
            {
                InitializeComponent();
                webcam = new WebCam();
            }
    
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                
            }
    
            public void ouvrirWebcam()
            {
                
                MessageBox.Show("on commence");
                webcam.InitializeWebCam(ref image1);
                MessageBox.Show("initialisation terminé");
                webcam.Start();
                MessageBox.Show("webcam démaré");
            }
    
            private void button2_Click(object sender, RoutedEventArgs e)
            {
                ouvrirWebcam();
            }
    
            private void button1_Click(object sender, RoutedEventArgs e)
            {
                traitement = new Thread(ouvrirWebcam);
                traitement.Start();
            }
    }

    ceci est le programme principale

    class WebCam
        {
        private WebCamCapture webcam;
        private System.Windows.Controls.Image _FrameImage;
        private int FrameNumber = 20;
        public void InitializeWebCam(ref System.Windows.Controls.Image ImageControl)
        {
            webcam = new WebCamCapture();
            webcam.FrameNumber = ((ulong)(0ul));
            webcam.TimeToCapture_milliseconds = FrameNumber;
            webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);
                _FrameImage = ImageControl;
        }
    
        void webcam_ImageCaptured(object source, WebcamEventArgs e)
        {
                _FrameImage.Source = Helper.LoadBitmap((System.Drawing.Bitmap)e.WebCamImage);
        }
        public void Start()
        {
                webcam.TimeToCapture_milliseconds = FrameNumber;
                webcam.Start(0);
        }
    }

    c'est la classe webcam

    j'utilise le dll que j'ai trouvé sur Code Plex et elle utilise un contrôle de type Image pour afficher dessus le stream des images

    quand je la démarre sans thread externe la webcam marche sans problème, mais le problème se déclenche quand j'essaye de l'externaliser avec un thread

    je reçois un MessageBox avec cette erreur :

    An error ocurred while capturing the video image. The video capture will now be terminated.
    La référence d'objet n'est pas définie à une instance d'un objet.

    je reçois la même erreur quand la webcam est utilisé par un autre logiciel.

    est ce que quelqu'un a une idée sur cette erreur??

    merci d'avance :)

    • Type modifié Aurel Bera mardi 26 mars 2013 08:20 Discussion
    samedi 9 mars 2013 22:41

Toutes les réponses