[C# 1.1] - UserControl dans Internet Explorer
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:
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 :
Code:
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; |
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:
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;
}
} |
Vous pourriez me dire ce qu ne vas pas ?
Pourtant si je test mon ActiveX en WinForm tout fonctionne très bien.
Merci à tous.