[英]C# code works in IDE but not in generated exe
我正在嘗試從系統托盤應用程序打開一個始終在頂部的表單,主要是為了顯示一些即時通知。
為了實現始終處於最佳狀態的行為,我遵循了reference1和reference2中的說明。
僅當我在 Frm_Load 上添加以下代碼時,參考中的代碼才有效。
private void Frm_Load(object sender, EventArgs e) {
this.TopMost = true;
this.Activate();
this.Focus();
this.BringToFront();
SetWindowPos(this.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); // code from references
}
該代碼僅在我在 Visual Studio 2019 中運行時有效。它在構建的 exe 中不起作用。 在exe形式下打開不是置頂,也不是一直置頂,而是在其他窗口下。 我在構建設置中禁用了 visual studio 代碼優化,但它沒有幫助。
是什么導致代碼在 IDE 和 exe 中的工作方式不同? 我怎樣才能解決這個問題,並顯示像 Winamp 這樣的置頂窗口?
問題源於我在線程中不恰當地使用打開表單。 我注意到我開始從偵聽器線程打開表單(偵聽來自 websocket 的通知)。 visual studio 以某種方式管理它並按照我的期望打開表單作為始終在頂部。
當我將窗體的打開代碼從線程更改為主窗體(使用方法調用程序)時,問題就解決了,exe 的行為也與調試相同。 偵聽器線程中的代碼如下所示:
GuiManager.getInstance().getMainForm().Invoke((MethodInvoker)delegate () {
PopupUtil.showPopup();
});
我希望對調試環境遇到類似問題的人有所幫助。 並發布了exe。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.