Что происходит с открытыми каналами DDE, если приложение, открывшее их, дает сбой? - PullRequest
2 голосов
/ 10 января 2011

Я добавляю DDE для своего приложения (C # 3.5), и иногда, когда я открываю тысячи (6000) каналов DDE, это работает, а иногда, особенно во время отладки и аварийного завершения Excel, это дает мне только некоторые элементы.

Я подозреваю, что каналы DDE все еще "активны" в Windows, и когда я пытаюсь открыть больше, я достигаю предела каналов DDE (10 000), и тогда не у всех есть данные.

Есть ли способ "очистить" движок DDE в Windows, поэтому я начну заново? или перезапуск Windows - единственное решение?

1 Ответ

0 голосов
/ 13 января 2011

Если вы используете NDde с открытым исходным кодом (http://ndde.codeplex.com/), то вы можете использовать класс DdeClient, который реализует шаблон IDisposable. Затем используйте клиент внутри блока using. Это эффективно создает блок finally, который должен закрыть соединение, если исключение. Например,

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

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

Однако я испытал то же самое, хотя с данными, которые не возвращались последовательно, но я не открывал тысячи соединений, так что это может быть другой проблемой.

...