2011-01-10 8 views
2

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

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

Есть ли способ «очистить» двигатель DDE в Windows, так что я начну новый? или перезапускает Windows единственным решением?

+1

DDE - это переход между собой. Осторожно, этот хищник съест тебя в любой момент. –

+1

В 2011 году ваш вопрос гласит: «Я подозреваю, что блоки управления памятью все еще« активны »в DOS, и когда я пытаюсь открыть больше, я достигаю предела 64 КБ» –

+0

Если вы используете C# 3.5, вам не следует использовать DDE, поскольку он устарел. Бьюсь об заклад, вы можете делать то, что хотите, используя OLE. Просмотрите COM-Interop для Exel для получения дополнительной информации. См. Также этот ответ: http://stackoverflow.com/questions/2442586/dynamic-data-exchange-dde-still-relevant/2442598#2442598 – frast

ответ

0

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

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

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

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

+0

Я пишу DDE-сервер, а не клиент, - и клиент падает. –

 Смежные вопросы

  • Нет связанных вопросов^_^