Tag: 事件

等待事件处理程序

所以这里是删除和事件 public delegate Task SomeEventHandler(SomeEventArgs e); … public event SomeEventHandler OnSomething; 订阅者(多个) some.OnSomething += DoSomething; … public async Task DoSomething(SomeEventArgs e) { await SomethingElse(); eA = true; } 事件电话 if (this.OnSomething != null) await this.OnSomething(args); // Here args.A is false // It should be true 问题是即使DoSomething没有完成,最后一部分也会继续。 会出现什么问题?

通过c#中的reflection提升事件

我想编写一个可重用的函数来通过reflection来引发事件。 搜索之后,我发现了类似的问题: 如何通过.NET / C#中的reflection来引发事件? 它一直有效,直到我向WinForm控件注册一个事件处理程序并尝试调用它。 私有字段’ ‘只是消失了。 下面是我的简化代码,它可以重现问题: Program.cs中: public static void Main() { Control control = new Control(); control.Click += new EventHandler(control_Click); MethodInfo eventInvoker = ReflectionHelper.GetEventInvoker(control, “Click”); eventInvoker.Invoke(control, new object[] {null, null}); } static void control_Click(object sender, EventArgs e) { Console.WriteLine(“Clicked !!!!!!!!!!!”); } 这是我的ReflectionHelper类: public static class ReflectionHelper { /// /// Gets method […]

如何使用addHandler引发事件

我对Vb.Net事件和处理程序很满意。 任何人都可以帮助我如何在c#中创建事件处理程序,并引发事件。

什么是在C#中实现链式事件的最佳方式

我有以下情况。 客户端代码只能访问FooHandler,而不能直接访问Foo实例。 public delegate void FooLoaded(object sender, EventArgs e); class Foo { public event FooLoaded loaded; /* … some code … */ public void Load() { load_asynchronously(); } public void callMeWhenLoadingIsDone() { loaded(this,EventArgs.Empty); } } class FooHandler { public event FooLoaded OneFooLoaded; /* … some code … */ public void LoadAllFoos() { foreach (Foo f […]

如何在C#中跟踪订阅者?

是否有一些隐藏的类属性可以让我知道这个?

删除代码背后的asp.net事件

我想在代码中删除一个事件。 例如,我的控制是这样的。 我想以编程方式删除OnTextChanged ..我怎样才能实现这一目标?

没有参数的C#事件。 我该如何处理它们?

我正在开发一个游戏菜单系统,我有屏幕和屏幕元素的标准层次结构。 (屏幕包含一些屏幕元素集合)。 我希望屏幕元素将事件发送到屏幕类以声明它已被选中。 但是,在这种情况下我不需要任何事件参数。 我不确定在没有任何参数的情况下创建事件的语法是什么。 我找到了一个将播放器索引作为事件参数传递的解决方案。 (我的游戏严格来说是单人游戏,所以这不是必需的。) public event EventHandler Selected; ^ – 如何在EventIndexEventArgs从EventArgsinheritance的地方声明此事件。 我可以省略PlayerIndexEventArgs,还是有一个默认类型可以在这里使用不发送参数? (也许只是EventArgs基类?)

在C#中举起一个事件

我在微软实践测试中遇到了这个问题,我感到很困惑。 这是一个问题: 假设已声明了Alarm事件,AlarmEventArgs类和AlarmEventHandler委托,以下哪个C#代码示例是引发事件的正确方法? 以下是他们提供的“正确”答案: AlarmEventArgs e = new AlarmEventArgs(1, 2); AlarmEventHandler handler = Alarm; if (handler != null) { handler(this, e); } 但是,还有另一个看似正确的答案。 AlarmEventArgs e = new AlarmEventArgs(1, 2); if (Alarm!= null) { Alarm (this, e); } 我个人总是使用第二种方法。 它工作得很好。 有人可以告诉我为什么我应该使用第一种方法而不是第二种方法?

C#事件实现(文章与reflection器)

public class EventsType {public event EventHandler> NewEvent; public void SmthHappened(string data) { MyEventArgs eventArgs = new MyEventArgs(data); OnNewEvent(eventArgs); } private void OnNewEvent(MyEventArgs eventArgs) { EventHandler<MyEventArgs> tempEvent = NewEvent; if (tempEvent != null) { tempEvent(this, eventArgs); } } } 我期望C#编译器会像这样翻译NewEvent: private EventHandler<MyEventArgs> _newEvent; public event EventHandler<MyEventArgs> NewEvent { [MethodImpl(MethodImplOptions.Synchronized)] add { _newEvent = (EventHandler<MyEventArgs>)Delegate.Combine(_newEvent, value); } […]

为什么使用事件来代表我可以做什么呢?

我知道事件总是与代表联系在一起。 但是,我错过了一些事件的核心用法,并试图理解这一点。 我创建了一个简单的事件程序,如下所示,它工作得很好。 namespace CompleteRef3._0 { delegate void someEventDelegate(); class EventTester { public event someEventDelegate someEvent; public void doEvent() { if (someEvent != null) someEvent(); } } class Program { static void EventHandler1() { Console.WriteLine(“Event handler 1 called..”); } static void EventHandler2() { Console.WriteLine(“Event handler 2 called..”); } static void EventHandler3() { Console.WriteLine(“Event handler 3 […]