我們的軟件由兩個程序組成。一個exe是一個守護進程,另一個是主應用程序。當我們的主應用程序正在運行時(守護進程當然也是活着的),守護進程窗口TopMost
設置爲false
,主應用程序啓動並殺死駐留在托盤中的另一個進程(在Windows Embedded
的圖像中不可見和禁用)。從主應用程序停用的窗口之一中,我們終止了第三方進程,而不是回到以前的窗口,我們看到了守護進程的窗口。這是因爲第三方應用程序被殺害而發生的。如果我們不殺死它,那麼我們的主應用會回到適當的窗口。 第三方程序的死亡如何造成這種奇怪的行爲?殺死窗戶焦點上的過程影響
UPDATE
守護程序啓動主應用程序。守護程序,它實現OnActivated如下一個窗口:
private void MainWindow_OnActivated(object sender, EventArgs e) {
this.Topmost = true;
}
private void MainWindow_OnDeactivated(object sender, EventArgs e) {
this.Topmost = false;
}
殺死在主應用程序窗口之一的停用第三方應用程序意味着,在該窗口OnDeactivated實現如下:
protected override void OnDeactivate(bool close) {
Process.Kill(procId);
}
「爲什麼你是否希望「回到前一個窗口」? 那麼,主應用程序總是有一個窗口是最頂層=真,有時我們打開模式對話框,而不是用戶手動管理這些窗口。儘量減少它們,所以我希望能夠通過Calibur去嘗試激活的窗口n.Micro。但是當我們要求Caliburn激活另一個窗口並且殺死托盤中的應用程序時,我們的守護程序窗口將變爲激活狀態並且處於最前端。如果我們評論殺人事件,那麼我們會看到我們嘗試激活的窗口。
順便說一句,我們問我們的開發第三方應用程序的同事推出沒有UI的版本。這並沒有幫助。這只是一個猜測,它失敗了。
你要我們列出可能導致一個窗口顯示出來,所以你可以選擇合適的一個一切可能的辦法,或者你認爲它可能是一些相關細節添加到您的問題有用嗎? – CodeCaster
除了我所說的之外,沒有任何相關的細節。 – EngineerSpock
我真誠地懇求不同。上述應用程序如何相互作用?什麼是停用,是指在WPF意義上失效(失去焦點)?你如何殺死應用程序?你爲什麼期望「回到上一個窗口」?其他相關窗口的「TopMost」是什麼?你爲什麼要以這種方式隱藏守護進程窗口,而不是以其他方式工作?但是可以肯定的是,你可以拒絕提供任何額外的細節,以便其他人可以幫助調查,並希望遇到這個特定問題的其他人來代替,但是你的機會相當渺茫。 – CodeCaster