Quand je me connecte a un serveur irc, je recois un peu de reponse du serveur puis j ai une erreur qui me dis que un thread ne peux etre execute depuis un autre thread:
[code]
public class cPage
{
public static TabControl _tabControl;
public static System.Collections.ArrayList _List = new System.Collections.ArrayList();
private TabPage _page;
private RichTextBox _text;
private TextBox _input;
private Socket _socket;
private IPEndPoint _endPoint;
private IPAddress _ipAddress;
private byte[] _buffer = new byte[256];
public cPage(string toUrl, int toPort)
{
_page = new TabPage(toUrl);
_page.UseVisualStyleBackColor = true;
_tabControl.TabPages.Add(_page);
_text = new RichTextBox();
_text.ReadOnly = true;
_text.Dock = DockStyle.Fill;
_text.Text = "Bienvenue...\n";
_page.Controls.Add(_text);
_input = new TextBox();
_input.Dock = DockStyle.Bottom;
_page.Controls.Add(_input);
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
_ipAddress = IPAddress.Parse(toUrl);
}
catch (Exception e)
{
string error = e.Message;
IPHostEntry entry = Dns.GetHostEntry(toUrl);
IPAddress[] addr = entry.AddressList;
_ipAddress = addr[0];
}
try
{
_endPoint = new IPEndPoint(_ipAddress, toPort);
_socket.Blocking = false;
AsyncCallback onconnect = new AsyncCallback(OnConnect);
_socket.BeginConnect(_endPoint, onconnect, _socket);
MessageBox.Show("Connected");
}
catch (Exception e)
{
MessageBox.Show(e.Message,"Constructor");
}
}
private void OnConnect(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
try
{
if (sock.Connected)
{
SetupReceiveCallback(sock);
}
else
{
MessageBox.Show("Impossible de se connecter au serveur.","OnConnect");
}
}
catch (Exception e)
{
MessageBox.Show(e.Message, "OnConnect");
}
}
private void SetupReceiveCallback(Socket sock)
{
try
{
AsyncCallback receive = new AsyncCallback(OnReceiveData);
sock.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, OnReceiveData, sock);
}
catch (Exception e)
{
MessageBox.Show(e.Message,"SetupReceiveCallback");
}
}
private void OnReceiveData(IAsyncResult ar)
{
Socket sock = (Socket)ar.AsyncState;
try
{
int nBytes = sock.EndReceive(ar);
if (nBytes > 0)
{
_text.Text += Encoding.ASCII.GetString(_buffer, 0, nBytes);
SetupReceiveCallback(sock);
}
else if (nBytes == 0)
{
MessageBox.Show("EOF");
}
else
{
MessageBox.Show("Connection timed out");
sock.Shutdown(SocketShutdown.Both);
sock.Close();
}
}
catch (Exception e)
{
MessageBox.Show(e.Message,"OnReceiveData");
}
}
}
[/code]
(necessite la creation d'une instance de la classe et du _TabControl)
[URL=http://skurcey.f2o.org/fcss/FCS.php][IMG]http://skurcey.f2o.org/fcss/chat.png[/IMG][/URL]