【发布时间】:2011-08-26 00:13:21
【问题描述】:
我有两个类库。一个是普通的 .NET 程序集,另一个是链接桌面类文件的 Compact Framework 设备程序集。该库负责服务器和客户端之间的 TCP 异步操作。
现在我为服务器创建一个 Windows 项目,并为客户端创建一个 Windows Mobile Forms 设备项目。
我在客户端和服务器接收到的数据上使用了一些事件。为了触发来自通过 TCP 安全的异步接收数据的数据,我使用了一个控制类虚拟对象来检查是否需要调用。
奇怪的是,当从服务器向设备 CF 客户端发送数据时,数据不需要任何线程处理来处理您需要显示数据的控件。 但是从客户端发送数据到服务器我得到跨线程操作异常。
这是一些代码。
我用来保护数据的静态方法。
public static void InvokeIfNecessary(Control control, Action setValue)
{
if (control.InvokeRequired)
{
control.Invoke(setValue);
}
else
{
setValue();
}
}
当我要抛出的数据来自于 TCP 通信。
if (OnClientChangeConnection != null) SafeData.InvokeIfNecessary(_helpControl, () => OnClientChangeConnection(ConnectedClients, requestClientInfo));
知道为什么我会出现这种行为吗?或者有什么更好的方法来处理这个问题?
谢谢!
【问题讨论】:
-
我不明白你的评论,这与我的问题完全无关。
-
主要是。我希望你用普通的旧 c# 或 windows 或更通用的东西来标记它。我只是在看到一个看起来非常有趣的问题时感到沮丧,然后发现它出现在一个我甚至不感兴趣的平台上。
-
基本上问题不是针对平台,而是针对 TCP 和异步。
标签: .net asynchronous c#-3.0 tcp multithreading