Bonjour à tous,
Je developpe actuellement un UserControl qui servira d'ActiveX dans Internet Explorer. Je me suis basé sur ce tutorial :WinFormsIeSourcing
Je dois utiliser les fonctions audio de l'api de Windows ansi qu'un SOCKET pour transmettre et reçevoir le son. Au début j'ai eu des problème avec la sécurité mais j'ai résolu le tout en créant une permission dans LocalIntranet_Zone (FullTrust) pour mon serveur local c'est à dire http://localhost/*.
BIEN !
Jusqu'ici tout va pour le mieux. Ensuite j'ai ouvert un Socket pour me connecter sur mon serveur, encore là tout va bien. Après je lance une nouvelle Thread
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // Get IP and port of remote host IPEndPoint ep = new IPEndPoint(Dns.Resolve(m_IPAddress).AddressList[0], m_PortNumber); // Connect m_ClientSocket.Connect(ep); // Start received thread Thread clientThread = new Thread(new ThreadStart(ReceiveThread)); clientThread.Name = "Client thread"; clientThread.Start(); // L'exécution retour à l'ActiveX...
Et voilà le code de la thread :
Le problème c'est que DÈS que j'appel la méthode Socket.Receive l'ActiveX gèle mon browser complètement... J'ai essayé de lancer la Thread sans lui faire faire de Socket.Received (juste des sleeping...) et cela gèle aussi !!!
Code : 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 // Client is running m_bIsRunning = true; // Client is running m_bIsThreadStopped = false; // While client is running then read incomming data while (m_bIsRunning) { // Start receive thread try { byte[] buffer = new byte[this.m_ReceiveBufferSize]; int iBytesCount = this.m_ClientSocket.Receive(buffer, 0, this.m_ReceiveBufferSize, SocketFlags.None); ; if (iBytesCount == 0) break; // Raise data sent event ClientDataReceivedEvent( new MemoryStream( buffer, 0, iBytesCount ) ); } catch (Exception ex) { if (m_bIsRunning) ClientErrorOccuredEvent( ex ); break; } } // Thread end m_bIsRunning = false; // Client disconnected ClientDisconnectedEvent(); // Thread stopped m_bIsThreadStopped = true;
Vous pourriez me dire ce qu ne vas pas ?
Code : 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 // Client is running m_bIsRunning = true; // Client is running m_bIsThreadStopped = false; // While client is running then read incomming data while (m_bIsRunning) { // Start receive thread try { // Raise data sent event Thread.Sleep( 100 ); } catch (Exception ex) { if (m_bIsRunning) ClientErrorOccuredEvent( ex ); break; } }
Pourtant si je test mon ActiveX en WinForm tout fonctionne très bien.
Merci à tous.
Partager