IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 82
    Points : 47
    Points
    47
    Par défaut Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé.
    Bonjour,
    J'utilise le httplistener et de celui-ci je souhaiterais afficher la requete sur l'UI. J'utilise un delegate (surement mal ) mais j'ai toujours ce message d'erreur.
    Pourriez vous me dire où je me trompe ?

    Le code du serveur http (voir ligne 53)

    Code VB.NET : 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
    52
    53
    Imports System.Net
    Imports System.Threading
    Imports System.IO
     
    Public Class ServeurHTTP
     
        Private hl As HttpListener
        Dim listenForNextRequest As AutoResetEvent = New AutoResetEvent(False)
     
     
        Public Sub Start()
     
            hl = New HttpListener()
            hl.Prefixes.Add("http://*:5500/")
            hl.IgnoreWriteExceptions = True
            hl.Start()
            ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf ListenHTTP))
        End Sub
     
        Private Sub ListenHTTP(state As Object)
     
            While (hl.IsListening)
                hl.BeginGetContext(New AsyncCallback(AddressOf ListenerCallback), hl)
                listenForNextRequest.WaitOne()
            End While
     
        End Sub
     
        '************************************************************************************************
        ''' <summary>
        ''' Manage request and answer to client
        ''' </summary>
        ''' <param name="ar"></param>
        ''' 
        Private Sub ListenerCallback(ar As IAsyncResult)
     
            ' Get request
            Dim listener As HttpListener = ar.AsyncState
            Dim context As System.Net.HttpListenerContext = Nothing
            If (listener Is Nothing) Then Return
            Try
                context = listener.EndGetContext(ar)
            Catch
                Return
            Finally
     
                listenForNextRequest.Set()
            End Try
     
            ' Route request
            Dim Result As String = ""
            Dim route As String = context.Request.Url.LocalPath.ToString()
            MainForm.BeginInvoke(New MainForm.d_MajRTB(AddressOf MainForm.MajRTB), "test")  ' <------ ICI

    et le code de l'UI

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Class MainForm
     
        Public server As New ServeurHTTP
     
        Delegate Sub d_MajRTB(ByVal text As String)
     
        Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            server.Start()
        End Sub
     
        Sub MajRTB(text As String)
     
        End Sub
     
    End Class

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Points : 674
    Points
    674
    Par défaut
    Je pense qu'au moment où tu déclenches ton premier BeginInvoke() la fenêtre n'est pas encore "finie d'être initialisée", c'est ce que dit ton message d'erreur.
    Le problème vient vraisemblablement du fait que tu "Start" tes "threaderies" un peu trop tôt. Plutôt que d'utiiser l'événement Load, essaie peut être l'événement Shown (une fois que la fenêtre est vraiment finie d'être chargée et affichée).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 82
    Points : 47
    Points
    47
    Par défaut
    Merci.J'ai essayé avec shown mais même résultat. Effectivement le message est clair mais je ne vois pas comment attendre la fin pour lancer mon thread.

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/08/2019, 10h04
  2. Impossible d'enregistrer le fichier.xlsm sur d'autres postes que le mien
    Par tiber33 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/09/2014, 13h38
  3. Réponses: 5
    Dernier message: 09/04/2014, 22h53
  4. Réponses: 4
    Dernier message: 01/03/2012, 16h20
  5. Réponses: 2
    Dernier message: 27/12/2006, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo