我的C#程序有一個非常奇怪的行爲。我在這個程序中使用了四個'hacky'pinvoke方法:GlobalKeyHooking,HotKey Registering,SetForegroundWindow/GetForegroundWindow和SendKeys.Send/SendWait。來自P/Invoke函數的奇怪行爲 - Magic loop
這裏有一個我不明白的行爲。我在一個程序中盜取了Ctrl + V,其中標準剪切/複製&粘貼例程由出現和消失的列表框中的自動完成列表替換。在一些裝有Windows 7的計算機上,我的程序就像一個魅力一樣,在其他50%的裝有Windows 7的計算機上運行(可惜沒有VS2010進行調試),出現了一個非常奇怪的循環---內部---一種方法。由於Ctrl和V本身被鉤住,我已經阻止了該方法被無限觸發。沒關係。但是另一個循環出現在方法內部。
簡而言之:myDebugValue增加到23-24-25!所以有些東西在決定停止之前試圖執行很多次函數。
有沒有人已經見過類似的不需要的循環?即使沒有try/catch塊,它也會在函數內跳動。
一些P/Invokes函數可以在某些Windows 7上崩潰而不是其他?
P/Invokes是否有自己的不可見的低級別彙編錯誤處理程序try/catch,比我的C#程序執行更強?
從視覺上看,當我這樣做時,我發現我的程序界面很快就閃爍了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