Tag: events

C#在自己的线程中执行的线程之间的事件(如何)?

我想要两个主题。 我们打电话给他们: 线程A. 线程B 线程A触发事件,线程B侦听此事件。 执行线程B事件侦听器时,它是使用线程A的线程ID执行的,所以我猜它是在线程A中执行的。 我想做的是能够向线程B发起事件,例如:“嘿,数据已准备就绪,你现在可以处理它”。 此事件必须在其自己的Thread中执行,因为它使用只有他可以访问的内容(如UI控件)。 我怎样才能做到这一点 ? 谢谢你的帮助。

避免在C#中重复的事件订阅

您如何建议避免重复事件订阅的最佳方法? 如果这行代码在两个地方执行,则事件将运行两次。 我试图避免第三方事件订阅两次。 theOBject.TheEvent += RunMyCode; 在我的委托制定者中,我可以有效地运行这个…… theOBject.TheEvent -= RunMyCode; theOBject.TheEvent += RunMyCode; 但这是最好的方法吗?

在面向.NET 4+的库中公开通知时,IObservable是否应优先于事件

我有一个.NET库,作为对象模型的一部分将发出某些事件的通知。 在我看来, 事件的主要优点是初学者的可接近性(以及某些消费环境中的简单性),主要的负面因素是它们不可组合 ,因此如果你想做任何事情,它们会被立即强制进入Observable.FromEvent *有趣的是没有编写代码丛。 正在解决的问题的本质是事件流量不会特别频繁或大量(它肯定不会尖叫RX),但绝对没有要求支持4.0之前的.NET版本[因此我可以使用System.Reactive内置的IObservable接口,不会强制对消费者产生任何重大依赖关系]。 我对一些通用指南感兴趣, 但是从API设计的角度来看,更喜欢IObservables不是event的一些具体原因 – 无论我的具体案例可能在哪里 – IObservable频谱。 那么,问题是: 如果我采用最简单的方法并且暴露event而不是IObservable那么对于API消费者来说,是否有任何具体的事情变得更加困难或有问题? 或者,重申:除了消费者必须执行Observable.FromEvent *才能组合事件之外,在API中公开通知时,是否真的没有理由更喜欢IObservable而不是event ? 使用IObservable进行非尖叫-RX内容或编码指南的项目的IObservable将是理想的,但并不重要。 在@Adam Houldsworth的评论中提到NB,我对.NET 4+库的API表面的具体内容感兴趣,而不是对我们这个时代代表更好的“默认架构”的意见调查: ) 注意,在C#中, IObserver和IObservable已经触及了这个问题, 对于Observer vs Delegates,事件和IObservable与普通事件或我为什么要使用IObservable? 。 由于SRP违规,我提出的问题的方面没有在任何答复中得到解决。 另一个略微重叠的问题是.NET Rx优于经典事件? 。 (使用IObservable而不是事件)[ 使用IObservable而不是事件属于同一类别。

将事件绑定到ViewModel

我正在为我的应用程序使用WPF和PRISM框架。 我使用的模式是MVVM(模型 – 视图 – ViewModel),我试图将MouseLeftButtonUp事件从View中的代码隐藏到ViewModel(因此事件将根据MVVM规则)。 现在我有这个: View.xaml: View.xaml.cs(代码隐藏): public partial class UC1001_DashBoardConsultants_View { public UC1001_DashBoardConsultants_View(UC1001_DashboardConsultantViewModel viewModel) { InitializeComponent(); DataContext = viewModel; } } ViewModel.cs: public void EmployeeGrid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { // insert logic here } 主要的想法是,当我点击DataGrid中的一个单元格时,事件将会触发。 我首先在后面的代码中尝试了它,并且它有效。 我到目前为止使用EventTriggers,但是当我调试并单击一个单元格时,我的调试器没有进入该方法。 有谁知道如何解决这个问题? 提前致谢! PS:当我这样做时,它是否也与(对象发送者)参数一起使用? 因为我需要在我的ViewModel中使用DataGrid来获取我刚刚点击的ActiveCell。 编辑: 事件绑定与Command一起工作! 我在我的DataGrid中有这个: 如何将Tag属性绑定到ViewModel? 我知道它已经从ViewModel绑定了,但是你可以看到值来自一个数组/列表和每列的值是不同的。

是否存在PictureBox控件的图像更改事件?

我如何知道图片框的图像何时发生变化? 是否有图像更改事件?

过滤掉Type.GetMethods()返回的自动生成的方法(getter / setter / add / remove / .etc)

我使用Type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)来检索给定类型的方法数组。 问题是返回的MethodInfo可能包含由我不想要的编译器生成的方法。 例如: property bool Enabled { get; } 将得到bool get_Enabled() 事件SomethingChanged将获得add_SomethingChanged(EventHandler)和remove_SomethingChanged(EventHandler) 我可以添加一些filter逻辑来摆脱它们,这可能会变得非常复杂。 我想知道是否还有其他我可以做的事情,例如使用BindingFlags设置,只检索用户定义的方法?

WPF MouseDown事件在控件中无处处理

我目前正在与另一场WPF斗争作斗争,即mouseEvents。 我基本上有一个非常简单的控件(一个包含Grid的Border ,它本身有一些TextBlocks )。 我试图实现一个简单的行为:双击应该将控件转换为编辑模式(实际上隐藏TextBlocks与TextBoxes绑定到相同的数据。 没什么好看的吧? 好吧,我在挣扎。 链接到我的UserControl的MouseDoubleClick只是在我点击一个控件时触发(比如,点击一个文本块)。 如果我单击TextBlocks之间的空白区域,则不会触发任何内容。 MouseDown甚至都没有。 我怎么能让它工作以便抓住每一次鼠标点击? 我假设将MouseDown事件链接到Border应该捕获Border上的每次单击但是……它最终没有捕获边框空白部分的点击。 这是我为您制作的一些代码草案: XAML: 代码背后: private void Border_MouseDown(object sender, MouseButtonEventArgs e) { thetext.Visibility = Visibility.Visible; } private void Border_mouseUp(object sender, MouseButtonEventArgs e) { thetext.Visibility = Visibility.Collapsed; } 现在尝试单击其中一个“BLUFF”文本:将出现“已点击”文本。 尝试点击TextBlocks之间的其他地方:没有任何反应。 谢谢!

关于事件的价值/参考类型的问题

在MSDN上,我发现以下内容: public event EventHandler SampleEvent; public void DemoEvent(string val) { // Copy to a temporary variable to be thread-safe. EventHandler temp = SampleEvent; 是参考吗? 如果是这样,我不理解其含义,因为当SampleEvent变为null时,temp也是如此 if (temp != null) temp(this, new MyEventArgs(val)); }

C#删除事件处理程序

我已经这样做了一段时间,但我没有注意到每次删除事件处理程序时我都在使用new 。 我应该创建一个新对象吗? 基本上1和2之间有区别吗? ethernetdevice.PcapOnPacketArrival -= new SharpPcap.PacketArrivalEvent(ArrivalResponseHandler); ethernetdevice.PcapOnPacketArrival -= ArrivalResponseHandler; 编辑:好的,这是重复的。 对于那个很抱歉。 答案发布在这里 。 具有相同目标,方法和调用列表的两个相同类型的委托被认为是相等的。

为OnScroll创建事件处理程序以进行Web浏览器控制

有没有人成功地在Web浏览器组件中捕获鼠标滚动事件? 我有两个网页浏览器控件我想同时滚动。 但是没有针对Web浏览器的滚动事件。 我想在下面创建一个类似的事件? 有没有人做过或看过这个? private void webCompareSQL_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { Document.Window.AttachEventHandler(“OnScroll”); } 在这里,我将调用我的事件并继续执行代码。 private void windowEvents_OnScroll() { int nPos = GetScrollPos(webCompareSQL.Handle, (int)ScrollBarType.SbVert); nPos <<= 16; uint wParam = (uint)ScrollBarCommands.SB_THUMBPOSITION | (uint)nPos; SendMessage(WebPrevSQL.Handle, (int)Message.WM_VSCROLL, new IntPtr(wParam), new IntPtr(0)); } 我找到了这段代码,但不知道如何使用它。 这是一个事件。 webCompareSQL.Document.Window.Scroll