Tag: events

如何使用表达式树创建一个空委托?

使用匿名方法,您可以创建自C#2.0以来的空委托。 public event EventHandler SomeEvent = delegate {}; public event Action OtherEvent = delegate {}; 这对于防止在调用事件时必须进行空检查非常有用 。 如何使用表达式树创建相同的行为? 我现在看到的唯一可能的选择是使用Expression.Lambda() ,但据我所知,这将需要大量的额外工作。

Prism事件聚合器不在单独的模块中工作

我遇到了棱镜事件聚合器的问题。 如果我订阅,并在同一模块中发布一个事件,它工作正常。 像这样 – public class InfrastructureModule : IModule { private IEventAggregator eventAggregator; public InfrastructureModule(IEventAggregator eventAggregator) { this.eventAggregator = eventAggregator; eventAggregator.GetEvent().Subscribe(TestSub); } public void Initialize() { eventAggregator.GetEvent().Publish(“Infrastructure module”); } private void TestSub(string s) { MessageBox.Show(s); } } 但是,如果我在另一个模块中订阅该事件,则在调用eventAggregator.GetEvent()。Publish()时没有任何反应 – public class OtherModule : IModule { private IEventAggregator eventAggregator; public OtherModule (IEventAggregator eventAggregator) { this.eventAggregator = […]

使用ASP.NET从另一个页面返回后,为什么Page_Load没有触发 – ergo epic embarrassment :)

假设我在同一个ASP.NET C#WebSite上有两个页面。 Page1.aspx在Page_Load事件中执行操作 我使用菜单导航到Page2.aspx Page2.aspx做了一些事情然后Response.Redirect回到Page1.aspx 这次Page1.aspx无法在Page_Load事件中执行任务,因为它永远不会触发。 我试图以声明方式关闭缓存,尝试在我的重定向中使用true for endResponse …似乎没有任何区别。 别介意大家! 我是个白痴! 使用Visual Studio Dev Localhost,Redirect重定向到实时页面! 🙂

.NET事件 – 阻止订阅者订阅事件

假设我有一个暴露事件的“处理器”接口 – OnProcess。 通常,实现者进行处理。 因此,我可以安全地订阅此事件,并确保它将被解雇。 但是一个处理器不进行处理 – 因此我想阻止订户对其进行处理。 我能这样做吗? 换句话说,在下面的代码中,我希望最后一行抛出exception: var emptyProcessor = new EmptyProcessor(); emptyProcessor.OnProcess += event_handler; // This line should throw an exception.

从c#创建Win32事件

我想从C#创建一个内核(也称为命名事件)。 我是否必须互操作服务并包装本机CreateEvent函数,或者是否已经有一个.NET类来完成这项工作? 我需要运行的函数应该是这样的:hEvent = CreateEvent(NULL,false,false,“MyCSHARPEvent”); 这应该通知所有探测器,探测有关该事件的MyCSHARPEvent。 如果需要包装函数,我如何将SECURITY_ATTRIBUTES结构从C#转换为win32?

泡沫事件的首选方式是什么?

我有三个对象,ObjectA有一个ObjectB,ObjectB有一个ObjectC。 当ObjectC触发事件时,我需要ObjectA来了解它,所以这就是我所做的…… public delegate void EventFiredEventHandler(); public class ObjectA { ObjectB objB; public ObjectA() { objB = new ObjectB(); objB.EventFired += new EventFiredEventHandler(objB_EventFired); } private void objB_EventFired() { //Handle the event. } } public class ObjectB { ObjectC objC; public ObjectB() { objC = new ObjectC(); objC.EventFired += new EventFiredEventHandler(objC_EventFired); objC.FireEvent(); } public event EventFiredEventHandler […]

委托类型和事件处理程序类型有什么区别?

三个相关的习语:事件,委托,事件处理程序。 我总是对谁被“添加”给谁感到困惑。 event += handler event += delegate handler += delegate 据我所知: delegate:指向具有已知签名的函数的指针。 event-handler:注册到事件的委托。 基本上,它是否与代表相同? event:使用event()调用事件时执行的委托\事件处理程序列表 令我困惑的是MSDN中的这个签名: public delegate void EventHandler(Object sender, EventArgs e)

为C#中的所有事件和委托创建一个catch-all处理程序

我想创建一个可用于处理任何事件或委托的处理程序。 具体来说,我希望能够编写如下代码: class Invoker { public object Invoke(object[] arg) { // generic handling code } } static void Main() { var p = new Person(); p.AddHandler(“Event1”, new Invoker().Invoke); } AddHandler是object的扩展方法,它接收事件名称和类型为Func的委托。 它应该能够做任何魔术来将事件(例如,在这种情况下为Event1 )绑定到提供的委托,以便在触发事件时调用委托。 Event1的签名无关紧要,因为AddHandler应该适用于所有类型的事件(和委托)。 我怀疑这可能涉及一些CIL生成来构建匹配指定事件类型的动态委托(例如Event1 )并将调用转发给指定的委托(例如new Invoker().Invoke )。 我能够构建这样一个动态委托,但它只能转发到静态方法,而不是实例方法,因为我找不到将待调用方法的绑定实例推送到CLR堆栈的方法(即示例中的Invoker实例)。 请参阅下面提供的代码以清楚地查看此问题(请参阅标有ISSUE的行)。 如果有人能指出一种方法来改进动态生成代码以捕获绑定对象或更好,建议一个更简单的解决方案,不需要CIL然后非常感激。 public static void AddHandler(this object target, string fieldName, Func func) { var eventInfo = target.GetType().GetEvent(fieldName); […]

将事件设置为空

我有这样的代码: public class SomeClass { int _processProgress; public int ProcessProgress { get { return _processProgress; } set { _processProgress = value; if (ProcessProgressChanged != null) ProcessProgressChanged(value); } } public delegate void ProcessProgressChangedEventHandler(int progressPercentage); public event ProcessProgressChangedEventHandler ProcessProgressChanged; public void ClearProcessProgressChangedEvent() { this.ProcessProgressChanged = null; } } 当我调用ClearProcessProgressChangedEvent()方法时,它会取消订阅 ProcessProgressChanged事件中的所有方法吗? 我的代码在C#,框架4,在VS2010 Pro中构建,项目在Winforms中。 请帮忙。 提前致谢。

创建自定义wpf事件

我创建了一个UserControl for Database连接,用户输入连接的用户名和密码。 此UserControl位于MainWindow.xaml中 现在,在我的UserControl后面的代码中,我创建了一个MSSQL连接。 如果登录成功,我想提升自定义事件以在MainWindow中公开。 例如,在MyUserControl.xaml.cs中 try { using (SqlConnection sqlConn = new SqlConnection(connection)) { sqlConn.Open(); MessageBox.Show(“Connessione Riuscita!”, “Connessione a ” + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Information); RaiseMyEvent(); sqlConn.Close(); } } catch (SqlException ex) { MessageBox.Show(“Connessione Fallita: ” + ex.Message, “Connessione a ” + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Error); } 在MainWindow.xaml我想使用mypersonalized事件: 我需要这个用于多种类型的连接(MSSQL,Oracle,MySql等)。 怎么弄这个?