Tag: 事件

C#WinForms ListView项目计数更改事件

WinView中的事件是否会在ListView中的项目数更改时触发? 我试过尺寸和文字 – 奇怪的是他们“sorta”工作但并不总是…… 我尝试触发标签更新列表视图项的计数,因为它更改而无需手动执行一百种方法。

如何在C#中只引发一个Timer事件?

如何让计时器事件一次触发一个。 例如,我有一个计时器,每10分钟发一次事件。 引发的事件需要10分钟或更长时间才能完成执行。 我希望计时器在事件结束后重置。 换句话说,我不想在任何时候提出超过1个事件的实例。

reflection:在运行时将事件字段与委托类型字段区分开来

我的主要问题是:在reflection中是否有可能将某个委托类型的字段与事件用作存储字段的字段区分开来? 这归结为一个问题:FieldInfo类是否包含有关它是否属于某个事件的信息,如存储字段? 我找不到任何可能告诉的属性,也没有找到属性属性。 在下面的代码中,SomeField和SomeEvent的FieldInfos的相关属性是相同的。 因此我不知道如何根据FieldInfos是否为eventstoragefield来对其进行排序。 using System; using System.Reflection; using System.Runtime.CompilerServices; namespace Test { class Program { public Action SomeField; public event Action SomeEvent; static void Main(string[] args) { FieldInfo[] fields = typeof(Program).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); foreach (FieldInfo fi in fields) Console.WriteLine(string.Format(“FieldName: {0}, Accessibility: {1}, Has Attributes: {2}.”, fi.Name, fi.Attributes, fi.GetCustomAttributes(true).Length != 0)); Console.ReadLine(); […]

具有自定义事件参数的C#reflection编程事件处理程序

这是我的问题/场景 public class TestEventArgs : EventArgs { public int ID { get; set; } public string Name { get; set; } } public event EventHandler TestClick 如何使用reflection在TestClick上附加EventHandler? (obj是实例,Activator.CreateInstance) EventInfo eventClick = obj.GetType().GetEvent(“TestClick”); Delegate handler = Delegate.CreateDelegate(eventClick.EventHandlerType, obj, ????); eventClick.AddEventHandler(obj, handler); 我的问题是TestEventArgs是在外部dll中声明的,但是???? 上面的methodinfo需要在其委托中签名?

为什么我会在创建和返回新结构时遇到此错误?

编译此代码时出错: using System; public struct Vector2 { public event EventHandler trigger; public float X; public float Y; public Vector2 func() { Vector2 vector; vector.X = 1; vector.Y = 2; return vector; // error CS0165: Use of unassigned local variable ‘vector’ } } 您好! 编译器说:“使用未分配的局部变量’vector’”并指向返回值。 在我看来,Vector2成为一个引用类型(没有事件成员它正常行事)。 怎么了?

.NET自定义事件组织帮助

作为C#的新手,我最近一直在研究自定义事件,虽然我认为我现在理解设置自定义事件所需的基本部分,但我无法确定每个部分所属的位置。 具体来说,这就是我想要做的。 我有一个树控件,表示内部数据结构的布局。 当数据在树中重新排列时(通过拖放),我需要重新排列基础数据结构以匹配。 所以,我试图从树控件的“Drop”事件处理程序中激活我自己的自定义事件(在我validation了drop之后)。 我的想法是我的事件的订阅者将处理底层数据的重新排序。 我只是在努力确定应该创建和/或使用每个事件机器的位置。 如果有人能为我提供上述基本样本,那就太好了。 例如,可能是一个简单的示例,用于在现有的button_click事件中设置和触发自定义事件。 这似乎是我正在尝试做的很好的模拟。 另外,如果我对这个问题的处理方法看起来完全错误,我也想知道。

一次只检查一个ListViewItem

我正在使用Compact Framework开发智能设备项目。 我有一个带有几个可检查ListViewItem :属性CheckBoxes为true。 我需要在时间只检查一个ListViewItem ,所以我订阅了ItemCheck事件: // I need to know the last item checked private ListViewItem lastItemChecked; private void listView_ItemCheck(object sender, ItemCheckEventArgs e) { if (lastItemChecked != null && lastItemChecked.Checked) { /* I need to do the following to prevent infinite recursion: ie subscribe and then unsubscribe the ItemCheck event. */ listView.ItemCheck -= listView_ItemCheck; […]

通过附加/分离事件来控制事件触发频率。 不好的做法?

昨天我提供了一个问题的答案如何控制C#中的事件触发? 简而言之,请问以下内容: “每当从相机收到一个新画面时都会发生一个事件。然而,这种情况比我想要的更频繁……我怎样才能控制事件发生的时间?” 在我的回答中,我提供了下面的代码,今天早上我发现我有2个downvotes没有任何评论。 我担心的主要不是代表的丢失,而是这是我在各种应用程序中使用自己的逻辑,并且downvotes可能表明我的实现是糟糕的实践或不利于性能。 因此,我问这个问题是为了澄清以这种方式附加/分离事件控制器是否有任何问题? public MyObject() { MyTimer = new System.Timers.Timer(100); // 10 Hz MyTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); MyTimer.Enabled = true; } private void ImageDataUpdated(object sender, EventArgs e) { // detach from the event to keep it from firing until the timer event has fired. MyImageObject.Update -= new UpdateEventHandler(ImageDataUpdated); // do stuff } […]

SystemEvents.SessionEnding在Process(之前打开)关闭之前不会被触发

当用户关闭会话时,我正试图在程序中做一些事情。 这是代码: using System; using System.Diagnostics; using Microsoft.Win32; using System.Windows.Forms; using System.Threading; public class MyProgram { static Process myProcess = null; public MyProgram() { } // Entry point static void Main(string[] args) { SystemEvents.SessionEnding += SessionEndingEvent; // Does not trigger inmediately, only fires after “myProcess” gets closed/killed myProcess = CreateProcess(“notepad.exe”, null); myProcess.Exited += pr_Exited; // […]

C#.Net Serial DataReceived对于高速率数据,事件响应太慢

我已经在VS2008 express中使用基于表单的程序设置了一个SerialDataReceivedEventHandler。 我的串口设置如下: 115200,8N1 Dtr和Rts启用 ReceivedBytesThreshold = 1 我有一个设备,我通过BlueTooth,USB转串口连接。 超级终端以任何数据速率接收数据。 数据以22字节长的数据包定期发送。 该设备具有可调节的数据发送速率。 在低数据速率,10-20Hz,下面的代码很好,没有问题。 但是,当我将数据速率提高到25Hz以上时,会在一次呼叫时开始接收多个数据包。 我的意思是每个传入的数据包都应该有一个事件触发器。 在更高的输出速率下,我在调用事件时立即测试了缓冲区大小(BytesToRead命令),然后缓冲区中有多个数据包。 我认为事件发生的速度很慢,当它到达代码时,更多的数据包已经打到了缓冲区。 我做的一个测试是看每秒触发事件的次数。 在10Hz,我得到10个事件触发器,真棒。 在100Hz,我得到类似40个事件触发器,不好。 我的数据速率目标是100HZ是可接受的,200Hz首选,300Hz最佳。 这应该工作,因为即使在300Hz,这只是52800bps,不到设置的115200波特率的一半。 我在看什么? public Form1() { InitializeComponent(); serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); } private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(Display_Results)); } private void Display_Results(object s, EventArgs e) { serialPort1.Read(IMU, 0, serial_Port1.BytesToRead); }