Tag: events

事件发生的次数越来越多

我有一个silverlight mvvm应用程序加载主视图,其中2个用户控件加载到2个ContentControls中,一个用列表框显示项目,另一个用编辑按钮。 当我单击编辑按钮时,2个新用户控件加载到ContentControls中,一个显示要编辑的数据(EditData),另一个显示保存和取消按钮(EditAction)。 当我单击“保存”按钮时,它会引发一个在单独的GlobalEvents.cs类中定义的事件,如: public event EventHandler OnSaveButtonClicked; public void RaiseSaveButtonClicked() { this.OnSaveButtonClicked(this, EventArgs.Empty); } 我在其他用户控件EditData中订阅它,因为我需要通过自定义EventArgs传输该编辑数据,所以我已经放入了它的ViewModel的构造函数: this.globalEvents.OnSaveButtonClicked += (s, e) => SaveData(); 并在保存数据中: public void SaveData() { globalEvents.RaiseSaveData(EditedGuy); } 这会引发另一个事件,将以前的用户控件加载到其ControlContent中,并在列表框中显示已编辑的数据。 多数民众赞成,但每当我点击编辑然后再次保存时,它会将事件提升两次,然后再提高3次,然后再提高4次,依此类推。 我怎样才能让它只被提升一次? 我认为这可能是因为每次我点击编辑,加载了一个用户控件的新实例,我不知道,也许订阅该事件,所以我试图粘贴 this.globalEvents.OnSaveButtonClicked -= (s, e) => SaveData(); 到Dispose()方法但没有成功。 我怎样才能做到这一点?

在控制台中捕获没有焦点的击键

我知道Windows窗体有一个问题,但它在控制台中不起作用,或者至少我无法让它工作。 即使控制台没有焦点,我也需要捕获按键

如何从控制台应用程序处理COM事件?

我正在使用来自第三方库的COM对象来生成定期事件。 当我使用Winforms应用程序中的库,将对象作为类成员并在主窗体线程中创建它时,一切正常。 但是,如果我从另一个线程创建对象,我不会收到任何事件。 我的猜测是我需要在用于创建对象的同一个线程中有某种事件循环。 我需要从控制台应用程序中使用此对象。 我想我可以使用Application.DoEvents,但我宁愿不在控制台App中包含Winforms命名空间。 我怎么解决这个问题? 更新3(2011-06-15):供应商终于回答了。 简而言之,他们说Application.Run创建的消息泵与Thread.Join创建的消息泵之间存在一些差异,但他们不知道这有什么区别。 我同意他们; 任何关于此事的光明都会非常感激。 更新: 从理查德评论到mdm回答: 如果其他组件是单线程并从MTA实例化,则Windows将创建工作线程+窗口+消息泵并执行必要的编组。 试着听从他的建议,我正在做以下事情: 更新2: 我改变了JoãoAngelo回答后的代码。 using System; namespace ConsoleApplication2 { class Program { [STAThread] static void Main(string[] args) { MyComObjectWrapper wrapper = new MyComObjectWrapper(); } } class MyComObjectWrapper { MyComObject m_Object; AutoResetEvent m_Event; public MyComObjectWrapper() { m_Event = new System.Threading.AutoResetEvent(false); System.Threading.Thread t = […]

如何在更改DataGrid.ItemsSource时引发事件

我是WPF的新手,我正在使用DataGrids,我需要知道属性ItemsSource何时被更改。 例如,我需要在执行此指令时必须引发事件: dataGrid.ItemsSource = table.DefaultView; 或者添加一行时。 我试过使用这段代码: CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(myGrid.Items); ((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(DataGrid_CollectionChanged); 但此代码仅在用户向集合中添加新行时才有效。 因此,当整个ItemsSource属性发生任何更改时,我需要引发一个事件,因为整个集合被替换或者因为添加了一行。 我希望你能帮助我。 先感谢您

在对象初始值设定项中分配事件

为什么不能在C#中的对象初始值设定项中分配事件和属性? 这样做似乎很自然。 var myObject = new MyClass() { Property = value, Event1 = actor, // or Event2 += actor }; 还是有一些我不知道的技巧?

如何在c#中订阅其他类的事件?

一个简单的场景:一个引发事件的自定义类。 我希望在表单中使用此事件并对其做出反应。 我怎么做? 代码示例,请! 请注意,表单和自定义类是单独的类。

在另一个应用程序中侦听事件

假设我有两个用C#编写的应用程序。 第一个是第三方应用程序,它引发一个名为“OnEmailSent”的事件。 第二个是我编写的自定义应用程序,我想以某种方式订阅“OnEmailSent”,即使是第一个应用程序。 有什么方法可以以某种方式将第二个应用程序附加到第一个应用程序的实例来侦听“OnEmailSent”事件? 因此,为了进一步说明,我的具体方案是我们有一个用c#编写的自定义第三方应用程序,它引发了一个“OnEmailSent”事件。 我们可以看到使用reflection器存在事件。 我们想要做的是在此组件发送电子邮件时进行一些其他操作。 我们能够想到的最有效的方法是能够使用某种forms的IPC作为anders建议并监听由第三方组件引发的OnEmailSent事件。 因为组件是用C#编写的,所以我们想要编写另一个可以将自己附加到执行进程的C#应用​​程序,当它检测到OnEmailSent事件已经被提升时,它将执行它自己的事件处理代码。 我可能会遗漏一些东西,但据我所知,远程处理的工作方式是需要一台服务器来定义客户可以订阅的某种合同。 我更考虑的是某人编写了一个独立的应用程序,例如outlook,它暴露了我想从另一个应用程序订阅的事件。 我想我正在考虑的场景是.net调试器以及它如何附加到执行程序集以在代码运行时检查代码。

Fire Form KeyPress事件

我有一个C#winform,我有一个按钮。 现在,当我运行我的应用程序时,该按钮会自动获得焦点。 问题是我的表单的KeyPress事件不起作用,因为按钮是聚焦的。 我试过this.Focus(); 在FormLoad()事件上,但仍然没有KeyPress事件。

C#:将对象添加到队列时触发事件

每当将对象添加到Queue时,我都需要能够触发事件。 我创建了一个扩展Queue的新类: public delegate void ChangedEventHandler(object sender, EventArgs e); public class QueueWithChange : Queue { public event ChangedEventHandler Changed; protected virtual void OnChanged(EventArgs e) { if (Changed != null) { Changed(this, e); } } } 然后从另一个类附加事件,如: QueueWithChange eventQueue = new QueueWithChange(); // eventQueue.Changed += new ChangedEventHandler(delegate(object s, EventArgs ex) { //This event is not being […]

如何将事件传递给方法?

我想创建一个方法,将事件作为参数,并向其添加eventHandler以正确处理它。 像这样: 我有两个事件: public event EventHandler Click; public event EventHandler Click2; 现在我想将一个特定事件传递给我的方法(伪代码): public AttachToHandleEvent(EventHandler MyEvent) { MyEvent += Item_Click; } private void Item_Click(object sender, EventArgs e) { MessageBox.Show(“lalala”); } ToolStripMenuItem tool = new ToolStripMenuItem(); AttachToHandleEvent(tool.Click); 可能吗? 我注意到这段代码工作正常,并返回到我的项目,并注意到当我传递在我的类中声明的事件时,它可以工作,但是当我从其他类传递事件时,它仍然无效。 我得到的是这个错误: 事件’System.Windows.Forms.ToolStripItem.Click’只能出现在+ =或 – =的左侧