繁体   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