簡體   English   中英

C# 代碼在 IDE 中有效,但在生成的 exe 中無效

[英]C# code works in IDE but not in generated exe

我正在嘗試從系統托盤應用程序打開一個始終在頂部的表單,主要是為了顯示一些即時通知。

為了實現始終處於最佳狀態的行為,我遵循了reference1reference2中的說明。

僅當我在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM