Tag: events

如何在一段时间内对一个流进行分区(GroupBy)并监视Rx中元素的缺失?

前几天我一直在尝试编写一个Rx查询来处理来自源的事件流,并检查是否缺少某些ID。 定义缺席使得存在一系列时间窗口(例如,在从9:00到17:00的所有日期),在该时间窗口期间应该存在最多20分钟而没有在流中出现ID。 更复杂的是,应根据身份certificate确定缺勤时间。 例如,假设出现在事件的组合流(A,A,B,C,A,C,B等)中的三种事件A,B和C,可以定义为 活动将在每天的9:00至10:00进行监控,最多不超过10分钟。 B事件每天从9:00到11:00进行监控,最多没有事件为5分钟。 C事件的监控时间为每天的12:00至15:00,最多没有事件为30分钟。 我想我需要首先对流进行分区以通过GroupBy分离事件,然后使用缺少规则处理生成的单独流。 我已经在Microsoft Rx论坛上对此进行了一些考虑(非常感谢Dave),我有一些工作代码可以生成规则并进行缺失检查,但是我很挣扎,例如,如何将其与分组相结合。 所以,没有进一步的演讲,迄今为止被黑客攻击的代码: //Some sample data bits representing the events. public class FakeData { public int Id { get; set; } public string SomeData { get; set; } } //Note the Now part in DateTime to zero the clock time and have only the date. The purpose […]

c#WPF如何在不声明新源的情况下从mediaended事件处理程序重复播放MediaElement?

我在WPF中播放video。我希望它循环播放所以我所做的是当媒体播放事件触发时,我播放我的video。 所以这会给我一个循环。 问题是为什么ui必须再次创造新的来源? 为什么我不能称之为’玩’? 出于某种原因,我不想在XAML中这样做。 看看我的代码片段: string startPath System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); public Window1() { InitializeComponent(); media.Source = new Uri(startPath + @”playlist.wpl”); media.play(); } private void Media_Ended(object sender, EventArgs e) { media.Source = new Uri(startPath + @”playlist.wpl”); //if i dont put this line, video wont play..seems like it cant get the source media.Play(); } 或者是否有一种正确的方法来循环NOT在XAML中,但在这里.cs文件?

编译器生成的事件的后备字段是否始终保证使用与事件相同的名称?

C#允许我们创建自定义事件访问器 。 Action _custom; public event Action Custom { add { _custom = (Action)Delegate.Combine( _custom, value ); } remove { _custom = (Action)Delegate.Remove( _custom, value ); } } 如果未指定它们, 编译器将为您创建它们 。 C#语言规范: 编译类似字段的事件时,编译器会自动创建存储以保存委托,并为事件创建访问器,以便向委托字段添加或删除事件处理程序。 反编译的源代码使用dotPeek进行简单的public event Action Public; 看起来如下: private Action Public; public event Action Public { add { Action action = this.Public; Action comparand; do […]

如何在完成View和ViewModel时删除事件处理程序,而不是模型

在我的应用程序中,我经常创建新的视图和ViewModel,但持久化相同的模型。 例如,我可能会在主窗口中显示项目列表的简单视图,并有另一个窗口,其中包含任何特定项目的更多详细信息。 可以随时打开和关闭详细信息窗口,也可以同时打开列表中不同项目的多个窗口。 因此,给定模型对象可以有多个ViewModel,并且需要使用其他位置的更改进行更新。 (我在我的模型上使用了INotifyPropertyChanged 。)当我完成它时,我希望摆脱ViewModels,即,当详细信息窗口关闭时。 public DetailViewModel(MyDetailModel detailModel) { // Retain the Detail Model this.model = detailModel; // Handle changes to the Model not coming from this ViewModel this.model.PropertyChanged += model_PropertyChanged; // Potential leak? } 据我所知,事件处理程序将使Model保留对ViewModel的引用,并防止它被垃圾收集。 1)这是对的吗? 如何判断这些引用是否仍然存在? 2)我应该如何确定不再需要ViewModel并取消订阅事件?

如何使用reflection将事件处理程序附加到事件?

我知道EventInfo.AddEventHandler(…)方法,它可以用来将处理程序附加到事件。 但是,如果我甚至无法定义事件处理程序的正确签名,应该怎么做,因为我甚至没有引用处理程序所期望的事件args? 我将用正确的代码解释问题。 //当我在我的解决方案中提供一切可用的场景时,Zero Reflection Scenario。 internal class SendCommentsManager { public void Customize(IRFQWindowManager rfqWindowManager) { rfqWindowManager.SendComment += HandleRfqSendComment; } private void HandleRfqSendComment(object sender, SendCommentEventArgs args) { args.Cancel = true; } } 现在,我希望通过使用reflection来实现相同的目标。 我已经能够弄清楚它的大部分但是当我将一个委托附加到事件时(使用AddEventHandler )它会抛出”Error binding to target method.” 例外。 我理解这个exception背后的原因,将错误的委托附加到事件中。 但必须有一些方法来实现这一目标。 internal class SendCommentsManagerUsingReflection { public void Customize(IRFQWindowManager rfqWindowManager) { EventInfo eventInfo = rfqWindowManager.GetType().GetEvent(“SendComment”); eventInfo.AddEventHandler(rfqWindowManager, […]

.NET事件特殊方法(添加/删除/提升/其他)

我想知道EventInfo.GetRaiseMethod和EventInfo.GetOtherMethods方法。 显然,CLR支持4种与事件相关的方法:添加,删除,提升和“其他”。 但是在C#中创建的事件只有添加和删除 …我假设在VB中使用了raise ,因为你必须在声明自定义事件时指定一个RaiseEvent方法,但显然情况并非如此: GetRaiseMethod总是返回null。 那么,有谁知道: 如果一个事件从未被使用过,那么有一个与事件相关联的加法方法有什么意义呢? 是否有使用此方法引发事件的特定MSIL指令? (我在操作码中找不到类似的东西) GetOtherMethods返回的“其他”方法是什么(好吧,实际上没有返回)? 他们应该做什么? BCL中有哪些类型可以实现这些特殊方法?

DTE2事件不会触发

在尝试开发我的第一个VS Addin时,我遇到了解雇DTE2事件的问题。 基本上,DocumentOpened和LineChanged事件由于某种原因不会触发。 我错过了什么重要的部分? namespace TestAddin { public class Connect : IDTExtensibility2 { private AddIn _addInInstance; private DTE2 _applicationObject; public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { _applicationObject = (DTE2) application; _addInInstance = (AddIn) addInInst; _applicationObject.Events.DocumentEvents.DocumentOpened += InitializeFoldingOnDocument; _applicationObject.Events.TextEditorEvents.LineChanged += UpdateFoldingOnDocument; } private void UpdateFoldingOnDocument(TextPoint startpoint, TextPoint endpoint, int hint) { […]

调用多态字段事件

考虑以下代码: public class TableMain { public virtual event Action UpdateFilter; …. } public class TableSub : TableMain { public override event Action UpdateFilter; public void UpdateQuery() { ….. if (UpdateFilter!=null) { UpdateFilter(); // Invocation of polymorphic field-like event??? } } } 在此代码中, ReSharper显示警报“调用多态字段事件”。 我的问题是:它究竟意味着什么? 这是一个糟糕的编程习惯的警报吗? 此外,以多态方式调用事件是不好的做法吗? (知道事件只能从声明它的类中提出。)

静态事件如何与C#中的非静态事件进行比较?

我刚刚意识到静态事件的存在 – 我很好奇人们如何使用它们。 我想知道相对比较如何与静态与实例方法保持一致。 例如,静态方法基本上是一个全局函数。 但我总是将事件与对象实例联系起来,而我在全球范围内无法思考它们。 这里有一些代码可以参考它是否有助于解释: void Main() { var c1 = new C1(); c1.E1 += () => Console.WriteLine (“E1”); C1.E2 += () => Console.WriteLine (“E2”); c1.F1(); } // <>+D() public delegate void D(); // +<>E1 // +<><>E2 // +F() // <> // <>E1 // <>E2 public class C1 { public void F1() { […]

试图了解事件聚合器模式

我试图以一种简单的方式实现事件聚合器模式,逐步学习它。 但我没有找到任何书或很好的video教程谈论它的实现。 我刚刚发现了一些很好的文章,例如http://weblogs.asp.net/rashid/archive/2009/03/05/use-event-aggregator-to-make-your-application-more-extensible.aspx和http ://martinfowler.com/eaaDev/EventAggregator.html第一篇文章太大,让我不了解模式,第二篇文章没有完成:)。 顺便说一句,我创建了我的课程: public class Member { public int ID { get; set; } public string UserName { get; set; } } public class MemberService { public void CommentSubmited() { // increase member score and do some other logic. } } public class Comment { public int ID { get; set; } public […]