微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 WF 中获取 applicationcontext 类的处理程序?

如何解决如何在 WF 中获取 applicationcontext 类的处理程序?

我目前正在开发一个托盘应用程序,它位于 Windows 托盘中,没有表单/窗口。 我为此遵循了一些公共代码在这文章中进行了解释:

How can I make a .NET Windows Forms application that only runs in the System Tray?

该类继承自 applicationcontext 并包含托盘图标、上下文菜单和其他必需品等内容。 应用程序也会启动一个线程,该线程在后台轮询工作并定期执行操作。

线程需要通知“ui”(在本例中是定义托盘图标的类)有关更改的信息。 这需要彼此完全隔离(这是一个给定的要求),因此调用在这里不起作用。 为此,我想使用消息传递通过线程内的消息通知 ui。 我得到了这个示例代码,我想使用它:

  public partial class Form1: Form
  {
    [DllImport( "user32.dll" )]
    static extern bool PostMessage( IntPtr hWnd,UInt32 Msg,int wParam,int lParam );

    public Form1()
    {
      InitializeComponent();
      MyMessageFilter Test = new MyMessageFilter();
      Application.AddMessageFilter( Test );
    }

    private void button1_Click( object sender,EventArgs e )
    {
      PostMessage( Handle,10000,0 );
    }
  }
  [SecurityPermission( SecurityAction.LinkDemand,Flags = SecurityPermissionFlag.UnmanagedCode )]
  public class MyMessageFilter: IMessageFilter
  {
    public bool PreFilterMessage( ref Message m )
    {
      // Blocks all the messages relating to the left mouse button.
      if( m.Msg == 10000 )
      {
        return true;
      }
      return false;
    }
  }

这里的问题是,在我的情况下,我不从表单继承以避免打开窗口,并且 applicationcontext 类(我的“ui”类)不提供 int 指针作为句柄。 有没有办法获得 applicationcontext 类的句柄,向它发布消息?

注意:我尝试使用 System.Messaging.Message(MSMQ:Microsoft Message Queuing)并且它有效,不幸的是它需要激活 Windows 功能并被此应用程序拒绝。

注2:我测试了一些试图让类继承自表单而不是应用程序上下文,但我无法隐藏现在自动显示的表单。 (在类中调用 this.Hide() 根本不起作用)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。