【发布时间】:2015-06-04 21:14:52
【问题描述】:
我有两个通过命名管道连接的简单应用程序。在客户端,我有一个方法可以每隔 n 毫秒检查一次传入消息:
private void timer_Elapsed(Object sender, ElapsedEventArgs e)
{
IFormatter f = new BinaryFormatter();
try
{
object temp = f.Deserialize(pipeClient); //hangs here
result = (Func<T>)temp;
}
catch
{
}
}
一开始管道是空的,f.Deserialize 方法会挂起整个应用程序。我什至不能检查那个管道是空的?这个问题有解决办法吗?
UPD:试过XmlSerializer,一切都一样。
【问题讨论】:
-
启动后台线程检查管道
-
@antlersoft 当然也挂了
-
后台线程应该挂起,直到管道上有可用数据
-
仅供参考,截至 2020 年 11 月,MS 在您的代码中推荐 not using using BinaryFormatter。事实上,它是不允许在 ASP.NET 中使用的。相反,请考虑使用 JsonSerializer 或 XmlSerializer。有关详细信息,请参阅BinaryFormatter security guide。
标签: c# xmlserializer binaryformatter