MouseKeyboardActivityMonitorを使用して、たとえばマウスを無効にするなどのユーザーアクティビティにいくつかの制限を設定しました。MangementObjectSearcherを使用すると、異なるスレッドエラーでマーシャリングされたアプリケーションがアプリケーションと呼ばれました
www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C
私は私の形で
public partial class MyForm:Form
{
KeyboardHookListener kl;
MouseHookListener ml;
MyForm:Form()
{
ml = new MouseHookListener(new GlobalHooker());
ml.Enabled=true;
}
private void MyForm_Load
{
ml.MouseDownExt += ml_MouseDownExt;
// And same thing for Click or ...
}
private void ml_MouseDownExt(object sender,MouseEventExtArgs e)
{
e.Handled= true;
// I have got hard disk serial number here
string sn = HardDisk.Serial;
}
}
をこれらのコードを持っていますそしてHardDisk.Serial
のコードManagementObjectSearcher s= new ManagementObjectSearcher(" SELECT *...");
foreach(var wmi in s.Get())
{
}
私はMyFormをクリックしたときに、私はエラーを取得します。
私は私のソリューションを構築し、手動 を、それを実行すると、私はこのエラーを取得する
The application called an interface that was Marshalled for different thread
スタック:
at system.management.MangementException.ThrowWithExtendedInfo(Exception e) at system.management.MangementObjectSearcher.Get() at HardDisk.Get_serial() at ml_MouseDownExt(object sender,MouseEventExtArgs e) at MouseKeyboardActivityMonitor.MouseHookListener.InvokeMouseEventHandlerExt(EventHandler'1 handler,MouseEventExtArgs e)
しかし、私は、例外がハードディスクにスローされますVisual Studioに私の解決策を実行したとき。シリアル s.Get行で、私はこれを得る
エラー:
Managed debugging assistant ' DisconnectedContext' Has detected a problem in 'my app Name.exe' Transition into com context 0xa4206 for this runtime callable wrapper failed with following error : an outgoing call can't be made since the application is dispatching an input asynchronous call
MangementObjectSearcherクラスから2つのエラーが発生していることは明らかです.MyForm内の別の場所でシリアル番号を取得します。エラーは、ml_MouseDownExtメソッドまたはGlobalHookerのイベントに追加されたメソッドをシリアルに取得すると発生します。 msdn。 MangementObjectSearcherの継承階層では、私はそれは私がこれらのエラーを避ける必要がありますどのようにこれらのエラーか
に関連していることを知りませんSystem.MarshalByRefObject
https://msdn.microsoft.com/en-us/library/system.management.managementobjectsearcher(v=vs.110).aspx
を参照してください?
このMDAを取得するために何をしたのかははっきりしていませんが、確かに非常に悪いです。スニペットもCodeproject.comプロジェクトもヒントはありません。 Program.csファイルに戻り、Main()メソッドに[STAThread]属性があることを確認します。あなたがしていることを本当に分かっていない限り、ワーカースレッド上でフォームオブジェクトを作成することは決してありません。ちょうど誰についてもしません。 –