2011-01-10 17 views
2

私のアプリ(C#3.5)にDDEを追加しています。時には何千もの(6000)のDDEチャンネルを開いて、時には特にデバッグ中にクラッシュすることがあります。開かれたアプリケーションがクラッシュした場合、開かれたDDEチャネルには何が起こりますか?

私は、DDEチャンネルがまだWindowsで "アクティブ"であると思っています。さらに開くと、DDEチャンネルの制限(10,000)に達した後、すべてがデータを持っていません。

WindowsでDDEエンジンを「クリーン」にする方法はありますか?または唯一の解決策をWindowsを再起動していますか?

+1

DDEはinteropのgotoです。猛禽が今あなたをいつも食べることに注意してください。 –

+1

2011年にあなたの質問は次のように表示されます: "私はメモリ制御ブロックがDOSでまだアクティブであると思っています。さらに開くと64KBの限界に達します" –

+0

C#3.5を使用している場合は、これは廃止予定です。私はあなたがOLEを使って欲しいものをやることができると確信している詳細については、COM-Interop for Exelを参照してください。この回答も参照してください:http://stackoverflow.com/questions/2442586/dynamic-data-exchange-dde-still-relevant/2442598#2442598 – frast

答えて

0

オープンソースのNDde(http://ndde.codeplex.com/)を使用している場合は、IDisposableパターンを実装するDdeClientクラスを使用できます。その後、使用ブロック内でクライアントを使用します。これにより、finallyブロックが効果的に作成され、例外がスローされた場合に接続を閉じる必要があります。例えば、データが一貫して返されていないと

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

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

はしかし、私も同じことを経験したが、それは別の問題かもしれので、私は、数千の接続を開けません。

+0

私はクライアントではなくDDEサーバを書いています - そしてクライアントはクラッシュします。 –