データをUSBデバイスに送信し、応答を待つC++ DLLを持っています(最大10秒)。このコールバックにはビルドがありませんDLL。これをUIスレッドから呼び出すと、明らかにUIがロックされます。非同期関数で非長時間バインディングの同期APIをラップする
私は現在、私はシンクの上にしかし、推奨されません非同期(async)私はこれを達成するための他の方法を見ていないことを読んだ
public async Task<USBResult> GetData(int command){
//The real function has C#/C++ interop code to marshal the memory and free it.
USBResult result;
//This function most likely calls Thread.Sleep whilst it waits for a callback internally.
//I know it uses FTDIx.dll to do the USB calls.
await Task.Run(() result = LongRunningDllCallWithNoCallback(command));
return result;
}
DLLの呼び出しなどをラップC#で、このC++ライブラリの非同期ラッパーを書かれています私の場合の機能性私はC++のDLLを変更することができず、開発者は15年前に書かれたSAE標準に準拠していなかったため、変更された場合には他のアプリケーションを破壊することになります。
この悪い習慣ですか?もしそうなら、この長い実行同期dll呼び出しで非同期関数を作成するのに好ましい方法は何でしょうか?
私は実際に読んだ後にあなたが示唆したことはお勧めできませんでした。あなたのブログはそれをうまく説明します、ありがとう。 – rolls