私のC#プログラムは非常に奇妙な動作をしています。私はこのプログラムで4つの 'ハッキーな'ピンボークメソッド、GlobalKeyHooking、HotKey登録、SetForegroundWindow/GetForegroundWindow、SendKeys.Send/SendWaitを使用しています。P/Invoke関数の奇妙な動作 - マジックループ
私が理解していない動作があります。私は標準のカット/コピー&貼り付けルーチンが表示されて消えるリストボックス内のオートコンプリートリストに置き換えられるプログラムでCtrl + Vを盗んでいます。 Windows 7のあるコンピュータでは、私のプログラムはWindows 7(悲しいことにそれをデバッグするVS2010がない)の50%のコンピュータの魅力のように動作し、非常に奇妙なループが--- ---メソッド内に現れます。 CtrlとV自体がフックされているので、私は既にメソッドが無限にトリガーされるのを防いでいます。それで大丈夫です。しかし、メソッド内に別のループが表示されます。
簡単に:myDebugValueは23-24-25に達するまで増加します!何かが停止することを決定する前に何度も関数を実行しようとしています。
誰も既に同様の望ましくないループを見ていますか? try/catchブロックはありませんが、関数内でバウンスしています。
一部のWindows 7ではP/Invoke関数がクラッシュすることがありますか?
P/Invokesは、C#プログラムの実行よりも強力な独自の目に見えない低レベルのアセンブラエラーハンドラtry/catchを持っていますか?
視覚的に見ると、私のプログラムのUIがすばやく多くの時間、25回点滅しているのがわかります。
private bool getOutOfHere = false;
private int myDebugValue = 0;
private void globalKeyHooking_KeyUp(object sender, KeyEventArgs e)
{
if (getOutOfHere) return;
myDebugValue = 0;
if (e.KeyCode == Keys.LControlKey)
{
getOutOfHere = true;
SendKeys.SendWait("^v");
getOutOfHere = false;
myDebugValue++;
}
}
私は2.0、3.0および4.0で、かつ同じ4台のコンピュータ、すべてのケースで、それはまだ同じ割合でコンパイルしようとした:50%がクラッシュし、50%の作品。
[編集]
私は本当にSendKeys.Sendは、Windows 7