2011-03-18 28 views
0

我有一個程序,我想在後臺啓動,當我想稍後查看它時,能夠點擊快捷方式鏈接或可執行文件並讓它啓動我的應用程序。我已經得到了這個在Windows Mobile模擬器中工作,但是當我真的在設備上嘗試它時,應用程序會盡量減少,但除非我轉到內置任務管理器程序並單擊「切換到」,否則我無法恢復它。模擬器和設備都運行WM 6.1.4。即使使用最小化控制盒('X')進行智能最小化,也會使應用程序最小化,但當單擊.exe文件時我無法恢復應用程序。ShowWindow SW_MINIMIZE無法恢復程序

有什麼想法?感謝幫助!

編輯:好吧,所以我可能忽略了一些關鍵信息。這是一個多線程程序。當我不啓動線程並讓主UI線程運行時,程序將最小化並恢復正常。只要我開始後臺線程,我需要運行,程序會盡量減少,但不會恢復。在這種情況下,我需要使用除SW_MINIMIZE之外的其他內容嗎?

這裏是我的代碼,程序最小化:

private void HideForm() 
{ 
    if (this.InvokeRequired) 
    { 
     HideFormCallback del = new HideFormCallback(HideForm); 
     this.Invoke(del); 
    } 
    else 
     ShowWindow(this.Handle, SW_MINIMIZE); 
} 

private const int SW_MINIMIZE = 6; 

[DllImport("coredll.dll")] 
private static extern bool ShowWindow(IntPtr wHnd, int cmdShow);

回答

1

好,我找到了答案。它實際上與單獨的線程完全無關。看來我正在使用的Intermec DLL導致了這個問題。該設備是一臺Intermec CK3掃描儀/手持設備和在我的節目,我正在嘗試設置與下面的代碼成像儀照明設置:

Imager i = new Imager(); 
i.IllumLevel = 10; 
i.Dispose();

如果相機類竊聽我不知道和影響方式WM試圖恢復應用程序,或者如果它是我調用它的方式,但註釋掉這三行代碼可以修復問題,所以我會進一步研究。

但是,無論如何,謝謝你們!

編輯:看起來像上面的代碼需要調用UI線程被調用和正確處理。一旦我做到了這一點,儘量減少和恢復工作。