環境:Windowsフォームアプリケーション、C#.NET 3.5、VS2008
オーバーライドされたWndProcハンドラー内から次の関数を呼び出すと、mc.GetInstances()行でこの例外が発生します。「COMExcepionは処理されませんでした-アプリケーションは、別のスレッド用にマーシャリングされたインターフェイスを呼び出しました。 ))」
このはるかに不可解なメッセージは、前述の例外の前に実際に表示されます。
「DiconnectedContextが検出されました-コンテキスト0x3333b40が切断されました。COMコンポーネントでリクエストを処理するためにプロキシは使用されません。これにより、破損やデータ損失が発生する可能性があります。この問題を回避するには、アプリケーションが内部に存在するCOMコンポーネントを表すRuntimeCallableWrappersで完全に実行されます。」
private bool IsRemovableDevice(char dl)
{
ManagementClass mc = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection partitions = mc.GetInstances();
string bleh = "";
foreach (ManagementObject p in partitions)
{
if (Convert.ToString(p["Caption"])[0] == dl && (int)p["DriveType"] == 2)
return true;
}
return false;
}
これが取引です。上記の関数は、WndProc関数以外のコンテキストから呼び出された場合に正常に機能します。
どうすればこれを修正できますか?