小编l.m*_*tto的帖子

C#SocketException没有被捕获

我的代码中有一个非常奇怪的引用.我正在开发ac#chat客户端 - 服务器应用程序.当我关闭服务器时,我希望客户端自动关闭.客户端使用StremReader从TcpClient对象读取.客户端处于while循环中,它读取一行(StreamReader.ReadLine()),然后对其读取的行执行一些操作.当serever关闭时,我也关闭了tcp连接服务器端.所以,我期待客户端看到由readline引起的SocketException,捕获它并退出.但是例外不会被抓住!这是客户端循环代码:

 while (true)
 {
     try
     {
          ricev = read.ReadLine();
     }
     catch(SocketException exc)
     {
         //It never gets in here
     }
     chat.Invoke(showMessage, ricev);
 }
Run Code Online (Sandbox Code Playgroud)

当我关闭服务器时,visual studio告诉我在System.dll中引发了"System.Net.Sockets.SocketException"第一次机会异常,但我无法理解它.为什么会这样?我还尝试用a捕获任何一般异常

catch
{
}
Run Code Online (Sandbox Code Playgroud)

阻止,但这也不起作用.

任何帮助将不胜感激!

编辑:经过多次尝试后,我发现SocketException根本没有被提升.这是如此奇怪,正如我在评论中所说,在相反的情况下,当客户端在服务器之前关闭时,异常会被提升并且我可以解决它.我真的不知道发生了什么......

c# try-catch socketexception

6
推荐指数
1
解决办法
5504
查看次数

Eclipse Luna:未调用处理程序的@CanExecute方法

我在Eclipse Luna RCP中遇到了命令处理程序的问题.

在我的E4应用程序模型中,我定义了一些必须在某些情况下才能启用的命令和相关处理程序.出于这个原因,在我的处理程序POJO中,我实现了注释用于@CanExecute检查所需条件的方法.

我还定义了与这些命令相关的菜单和工具栏项.

问题是我的@CanExecute方法没有被正确调用,因此,菜单和工具栏项不会相应地启用/禁用.

特别是,对于菜单项,@CanExecute方法仅在应用程序启动时调用几次,但在此之后从不调用.

相反,对于工具栏项,@CanExecute仅在活动上下文更改时(例如,更改活动部件或打开新shell时)调用方法.

在开普勒,行为完全不同(并按预期工作):

  • 对于菜单项,@CanExecute每次显示菜单时都会调用这些方法
  • 对于工具栏项,有一个计时器@CanExecute每400ms 调用一次方法

这是Luna中的已知错误吗?您知道任何可能的解决方法来实现预期的行为吗?

谢谢!

eclipse-rcp handler canexecute e4 eclipse-luna

3
推荐指数
1
解决办法
1374
查看次数