【问题标题】:What happends to opened DDE Channels if the application that opened them crashed?如果打开 DDE 通道的应用程序崩溃,打开的 DDE 通道会发生什么情况?
【发布时间】:2011-01-10 08:28:34
【问题描述】:

我正在为我的应用程序 (C# 3.5) 添加 DDE,有时当我打开数千 (6000) 个 DDE 通道时它可以工作,有时,尤其是在调试和 excel 崩溃期间,它只会给我一些项目。

我怀疑 DDE 通道在 Windows 中仍处于“活动状态”,当我尝试打开更多通道时,我达到了 DDE 通道限制 (10,000),然后并非所有通道都有数据。

有没有办法“清理”Windows 中的 DDE 引擎,所以我会重新开始?还是重启 Windows 是唯一的解决方案?

【问题讨论】:

  • 如果您使用的是 C# 3.5,则不应使用 DDE,因为它已被弃用。我打赌你可以使用 OLE 做你想做的事。查找用于 Exel 的 COM-Interop 以获取更多信息。另请参阅此答案:stackoverflow.com/questions/2442586/…
  • DDE 是互操作的首选。当心,那只猛禽随时会吃掉你。
  • 对于“已弃用”,替换为“自 15 年前过时”
  • 在 2011 年,您的问题看起来像“我怀疑内存控制块在 DOS 中仍然‘活动’,当我尝试打开更多时,我达到了 64KB 的限制”
  • 来吧人们,你认为我想添加 DDE 支持吗?有时我们有一个小东西叫做向后兼容...

标签: c# .net windows dde


【解决方案1】:

如果您使用的是开源 NDde (http://ndde.codeplex.com/),那么您可以使用实现 IDisposable 模式的 DdeClient 类。然后在 using 块中使用客户端。这有效地创建了一个 finally 块,如果抛出异常,它应该关闭连接。例如,

using (DdeClient client = new DdeClient(DDE_SERVER_NAME, dataField))
{
    client.Connect();

    string data = client.Request("xyz", DDE_TIMEOUT);
}

但是,我也遇到过同样的情况,虽然数据没有始终如一地返回,但我没有打开数千个连接,所以这可能是一个不同的问题。

【讨论】:

  • 我正在编写 DDE 服务器,而不是客户端 - 客户端崩溃了。
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多