【发布时间】:2014-12-07 00:36:56
【问题描述】:
我在 C# 中使用了一个组件进行套接字连接
我通过线程将 10 个 tcp 对象连接到服务器。 我在一个事件(Data_OnRecived)中得到接收数据
这是我的代码:
// 连接函数
private void Connect(object State)
{
Tcp tcp = (Tcp)State;
TcpSession tcpSession = new TcpSession();
tcpSession.RemoteEndPoint = new Dart.Sockets.IPEndPoint(IP, Convert.ToInt32(Port));
tcpSession.ConnectTimeout = 1;
try
{
tcp.Connect(tcpSession);
}
catch(System.Net.Sockets.SocketException ex) {
tcp.Marshal(ex);
}
}
// 初始 TCP 组件
private void TcpInitialize()
{
for (int i = 0; i < MaxConnection; i++)
{
SocketControl[i].TCPConnection = new Tcp();
SocketControl[i].TCPConnection.Data += new System.EventHandler<Dart.Sockets.DataEventArgs>(this.tcp_Data);
SocketControl[i].TCPConnection.Start(Connect, SocketControl[i].TCPConnection);
SocketControl[i].TCPConnection.Tag = i;
}
}
和接收数据时触发的 TCP_Data 事件处理程序:
void tcp_Data(object sender, Dart.Sockets.DataEventArgs e)
{
TCP tcp = (TCP) Sender;
int GlobalVariable = tcp.Tag;
}
我的问题是 tcp_Data 将在线程模式下运行,而不是在队列中并一一运行。我可以更改此事件不以线程模式启动吗?我的意思是每一个接收到的数据,一个接一个地触发 tcp_Data。
感谢您的帮助
【问题讨论】:
标签: c# multithreading events