Tag: 事件

C#在添加的线程中触发事件

考虑两个class级; Producer和Consumer (与经典模式相同,每个都有自己的线程)。 Producer是否可以拥有一个Consumer可以注册的事件,当生产者触发事件时,消费者的事件处理程序是在自己的线程中运行的? 以下是我的假设: Consumer不知道Producer的事件是否在他自己的线程或其他线程中被触发。 Producer和Consumer都不是Control后代,因此它们没有inheritanceBeginInvoke方法。 PS。 我不打算实现Producer – Consumer模式。 这是两个简单的类,我正在尝试重构生成器,因此它包含线程。 [UPDATE] 为了进一步扩展我的问题,我试图以最简单的方式包装硬件驱动程序。 例如,我的包装器将有一个StateChanged事件,主应用程序将注册该事件,以便在硬件断开连接时通知它。 由于实际的驱动程序除了轮询以外没有任何其他方法来检查它的存在,我将需要启动一个线程来定期检查它。 一旦它不再可用,我将触发需要在添加的同一线程中执行的事件。 我知道这是一个经典的Producer-Consumer模式,但由于我正在尝试简化使用我的驱动程序包装器,我不希望用户代码实现使用者。 [UPDATE] 由于一些评论表明没有解决这个问题的方法,我想补充一些可能会改变他们想法的路线。 考虑到BeginInvoke可以做我想要的,所以它不应该是不可能的(至少在理论上)。 实现我自己的BeginInvoke并在Producer调用它是一种查看它的方法。 只是我不知道BeginInvoke是如何做到的!

在WinForm C#上捕获KeyUp事件

我尝试在System.Windows.Forms上捕获F5,因为我写道: partial class MainForm { (…) this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp); (…) } public partial class MainForm : Form { (…) private void MainForm_KeyUp(object sender, KeyEventArgs e) { Log(“MainForm_KeyUp”); if (e.KeyCode == Keys.F5) { RefreshStuff(); } } } 但我的事件捕捉看起来不起作用。 你知道如何在System.Windows.Forms上cactch EventKey吗?

静态EventHandler事件的发件人

我有静态EventHandler事件的类: public static event EventHandler MyEvent; static void RaiseEvent() { EventHandler p = MyEvent; if (p != null) { p(null, EventArgs.Empty); } } 由于我没有任何可用作事件发送者的对象,因此我使用sender = null引发此事件。 根据.NET编程指南,将此参数设置为null是否可以? 如果没有,我可以将哪个对象用作发件人?

VB和C#中的事件有什么区别?

我是一名VB程序员,正在进入C#。 我学会了如何在vb中创建和引发事件,并发现它在C#中没有以相同的方式完成。 有没有人遇到过一篇文章,它将帮助我理解如何在C#中做事件,也许可以解释为什么它在VB中有所不同。 谢谢

观察控制以确定被触发的事件?

有没有办法列出特定WinForms控件的所有触发事件,而无需为每个可能的事件显式创建处理程序? 例如,我可能希望在各种数据绑定操作期间看到在DataGridView和BindingSource之间触发的事件序列。

Silverlight处理多个按键组合

我有一个Silverlight应用程序,我在其中捕获某些按键,如Tab或Ctrl来执行某些操作。 但是,我希望能够同时处理多个按键,例如Ctrl + R或类似的东西。 有没有办法在Silverlight中做到这一点,如果是这样,怎么样?

我的class级应该订阅自己的公共活动吗?

我正在使用C#3.0。 遵循标准事件模式我有: public event EventHandler SomeEventHappens; protected virtual void OnSomeEventHappens(EventArgs e) { if (SomeEventHappens != null) { SomeEventHappens(this, e); } } private object _someProperty; public object SomeProperty { get { return _someProperty; } private set { if (_someProperty == value) { return; } OnSomeEventHappens(EventArgs.Empty); _someProperty = value; } } 在同一个class级中,我想在SomeProperty改变时采取一些行动。 我看到它的方式我有3种选择: 1)在SomeProperty setter中做东西。 因为我试图订阅所有事情的理念应该做一件事并做得好,因此有些事情让我误以为然。 将东西塞入制定者似乎与此相反,或至少具有倾向。 […]

可以在不创建派生类的情况下将数据传递给EventArgs吗?

我有点困惑。 我知道我可以创建派生自EventArgs的类,以便拥有自定义事件数据。 但我可以以某种方式使用基类EventArgs吗? 像鼠标按钮一样,在订阅者方法中,始终存在“EventArgs e”参数。 我能以某种方式创建以这种方式传递数据的方法,我的意思是它们将在基础Eventargs中传递吗?

在C#中声明事件的语法是什么?

在我的课程中,我想声明一个其他类可以订阅的事件。 声明事件的正确方法是什么? 这不起作用: public event CollectMapsReportingComplete;

透明度和鼠标事件WinForms

我目前有一个具有完全透明背景的表单。 目前,当用户将鼠标hover在表单上的控件上时,我必须在论坛顶部显示图片框。 将鼠标hover在PictureBox上会正确触发MouseEnter事件,并将按钮Visible状态设置为true, MouseLeave事件将其设置为false。 按钮本身具有相同的MouseEnter和MouseLeave事件,但是当Winforms将鼠标事件传递到窗体上透明的任何空间下的窗体时(我在按钮中使用的图像也是透明的)每当我点击按钮时,它们消失,因为表格认为鼠标已经“左”了按钮或表格。 有谁知道阻止事件传递的任何方式? 你问的一些代码? 你得到一些代码:) // Form Constructor! // map = picturebox, this = form, move = first button, attach = second button public Detached(PictureBox map) { InitializeComponent(); doEvents(map, this, this.attach, this.move); } // doEvents method! I use this to add the event to all controls // on the form! void doEvents(params […]