Tag: 事件处理

你需要“unwire”一个匿名函数/ lambda

我的理解是,用C#连接的任何事件处理程序都需要无线连接。 Object myObject = new Object(); myObject.Event += EventHandler; //Wired myObject.Event -= EventHandler; //Unwired 但是你需要取消以下代码吗? 如果是的话,怎么样? Object myObject = new Object(); myObject.Event += (object sender, EventArgs e) => { }; //Wired myObject.Event -= ????? //Unwire? How? 我的假设是不是?

我应该使用EventHandler 和/或EventArgs委托模式吗?

阅读我的C#书,它讨论了在MS喜欢的模式中使用事件/代理(我假设我认为事件相当于没有成员变量访问的公共委托): public delegate Something(object o, EventArgs e) 然后进入有关EventArgs解释,基本上不需要委托声明: public EventHandler events 与(我认为)相同 private delegate Something(object o, SomeEventArgs e); public event Something events; 使用EventHandler是个好主意吗? 我可以看到为什么发送object可能有用,但不是所有时间 – 而且很多时候,EventArgs可能会变得很烦人。

C#中的跨线程事件处理

我正在使用一个框架,该框架在一个单独的线程中运行自己的事件调度程序。 框架可能会生成一些事件。 class SomeDataSource { public event OnFrameworkEvent; void FrameworkCallback() { // This function runs on framework’s thread. if (OnFrameworkEvent != null) OnFrameworkEvent(args); } } 我想将这些事件传递给Winforms线程上的Winforms对象。 我显然检查InvokeRequired并在必要时将其发送到Winforms线程。 class SomeForm : Form { // … public void SomeAction(SomeArgs args) { if (InvokeRequired) { BeginInvoke(new Action(SomeAction), args); return; } // … } } 现在事件可能在表单处于关闭状态时传递,这会导致各种问题,所以我在Winforms线程上从框架的事件源取消注册表单的事件处理程序,如下所示: var form = […]

事件参数是通过C#中的引用还是值传递的?

一个相当简单的问题(我认为),但我似乎没有看到答案。 我知道有些值是通过值传递的(比如int和long),而其他值是通过引用传递的(比如字符串),当你将它们传递给函数时。 在我的程序中,我使用后台工作程序,以便在我们在后台执行长时间的过程时GUI不会锁定。 我需要将数据从另一个文件传递回UI线程,所以我一直在使用事件。 现在我需要将一个字符串数组列表发送回GUI线程来处理,我担心它将如何处理。 基本上,在工作线程中,我有一个循环,它将填充列表,通过事件处理程序将其发送回GUI,然后清除它,以便它可以在下一次循环中填充它并重新开始。 我担心当我这样做时,如果列表是通过引用传递的,那么在UI线程上,我会认为它会在读取中间清除,因为工作线程仍将在后台清除它。 在这种情况下,传递将是更可取的,我可以找到强制它的方法(复制到某个持有者数组或添加互斥体或类似的东西),但我认为知道事件参数是否通过传递是很好的一般的引用或值,或者它与方法是否相同,并且它会在通常传递参数时传递它们?

如何在WPF中将evenHandler设置为所有窗口(整个应用程序)?

如何将事件处理程序(如keydown )设置为整个解决方案,而不是单个窗口?

一段时间后,FileSystemWatcher停止引发事件

我们已经构建了一个使用FileSystemWatcher监听文件夹的窗口服务,在创建时我们处理文件,依此类推。 但是几天后事件就停止了。 它可能被垃圾收集器(GC)收集吗? GC是否收集持有类(单身)? 我应该使用弱事吗? 我是否有错误意味着事件未注册? 我认为问题是,FSW有一个内部缓冲区,当它溢出错误时,请看一下本文提供的代码来解决这个问题。 希望这有助于任何人。

如果要处理按钮点击事件,则在Page.Load期间识别

我有ASPX网页,上面有一个按钮。 用户单击此按钮后,将请求提交给服务器并执行按钮单击事件处理程序。 我有一些必须驻留在Page.Load上的逻辑,但是这个逻辑取决于是否通过按钮点击提交了请求。 基于页面生命周期事件处理程序在页面加载后执行。 问题 :如何在页面加载中找出页面加载后要执行的事件处理程序?

为什么我的事件处理程序触发两次?

嘿家伙我有一个艰难的时间试图解决这个问题我已经在3小时仍然无法找出为什么它这样做…这里是代码 private void Catagory_SelectionChanged(object sender, SelectionChangedEventArgs e) { int selectedCategoryId = categoryIdList[categoryListBox.SelectedIndex]; client.GetItemsAsync(selectedCategoryId); client.GetItemsCompleted += new EventHandler(client_GetItemsCompleted); } void client_GetItemsCompleted(object sender, GetItemsCompletedEventArgs e) { itemIdList.Clear(); itemNameList.Clear(); itemNumberList.Clear(); itemDisplayList.Clear(); //Clears the Display List Items if (e.Error == null) { itemIdList = e.ItemIDList; itemNumberList = e.itemNumber; itemNameList = e.Result; for (int i = 0; i < itemIdList.Count; […]

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

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

One Liner:WeakReference-to-a Lambda事件处理程序

除了多次使用它会违反DRY原则这个事实之外,你能否看到这种单线的缺点? 这似乎很简单但事实上我还没有看到其他人提出这个问题让我想知道它是否有缺点。 这段代码创建一个方法的WeakReference ,然后注册一个调用引用目标的事件处理程序。 SomeEvent += (sender, e) => ((Action)(new WeakReference((Action)ProcessEvent)).Target)(); 谢谢, 本