如何解决如何在 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 举报,一经查实,本站将立刻删除。