Tag: 事件

忽略排队的鼠标事件

我有一个用C#编写的针对.NET Compact Framework 3.5的应用程序,在Windows CE上运行。 有时会在UI线程上执行持续一秒左右的操作。 我当前设置Cursor.Current属性以指示应用程序正忙,但这不会阻止急切用户的鼠标事件排队。 这有时会导致意外点击。 在.NET Compact Framework平台上忽略排队鼠标消息的最佳方法是什么? 遗憾的是,代码必须在UI线程上运行。

这是在C#中没有空检查的情况下触发/调用事件的更好方法吗?

我见过的大多数代码使用以下方式来声明和调用事件触发: public class MyExample { public event Action MyEvent; // could be an event EventHandler, too private void OnMyEvent() { var handler = this.MyEvent; // copy before access (to aviod race cond.) if (handler != null) { handler(); } } public void DoSomeThingsAndFireEvent() { // … doing some things here OnMyEvent(); } } 甚至ReSharper也会按照上面提到的方式生成一个调用方法。 为什么不这样做: […]

如何在C#中等待单个事件,超时和取消

所以我的要求是让我的函数等待第一个实例,来自另一个类和另一个线程的event Action ,并在我的线程上处理它,允许等待被超时或CancellationToken中断。 我想创建一个我可以重用的generics函数。 我设法创造了一些(我认为)我需要的选项,但两者看起来都比我想象的要复杂得多。 用法 为了清楚serialDevice ,此函数的示例使用将如下所示,其中serialDevice在单独的线程上吐出事件: var eventOccurred = Helper.WaitForSingleEvent( cancellationToken, statusPacket => OnStatusPacketReceived(statusPacket), a => serialDevice.StatusPacketReceived += a, a => serialDevice.StatusPacketReceived -= a, 5000, () => serialDevice.RequestStatusPacket()); 选项1-ManualResetEventSlim 这个选项并不错,但是对于ManualResetEventSlim的Dispose处理比看起来应该更糟糕。 它给了ReSharper适合我在闭包内访问修改/处理的东西,而且真的很难遵循,所以我甚至不确定它是否正确。 也许有一些我遗漏的东西可以清理它,这是我的偏好,但我不会随便看到它。 这是代码。 public static bool WaitForSingleEvent(this CancellationToken token, Action handler, Action<Action> subscribe, Action<Action> unsubscribe, int msTimeout, Action initializer = null) { var […]

我应该锁定’事件’吗?

我应该在以下情况下锁定事件: 事件foo; 线程A:将调用foo + = handler; 线程B:将调用foo – = handler; 我应该锁定foo吗?

用参数调用eventhandler

Visual Studio 2008,C#3.0。 我在下面有一个调用事件处理程序的方法。 我想将方法​​接收的两个参数传递给事件处理程序。 我想做这样的事情: wc.DownloadDataCompleted += wc.DownloadedDataCompleted(strtitle, placeid); 这是否可能,如果是的话,我将如何去做呢? 代码片段: public void downloadphoto(string struri,string strtitle,string placeid) { using (WebClient wc = new WebClient()) { wc.DownloadDataCompleted += wc_DownloadDataCompleted; wc.DownloadDataAsync(new Uri(struri)); } }

创建进程时是否存在System事件?

创建新进程时是否有任何事件。 我正在编写用于检查某些进程的ac#应用程序,但我不想写一个无限循环来连续迭代所有已知进程。 相反,我宁愿检查创建的每个进程,也不要遍历事件触发的所有当前进程。 有什么建议? Process[] pArray; while (true) { pArray = Process.GetProcesses(); foreach (Process p in pArray) { foreach (String pName in listOfProcesses) //just a list of process names to search for { if (pName.Equals(p.ProcessName, StringComparison.CurrentCultureIgnoreCase)) { //do some stuff } } } Thread.Sleep(refreshRate * 1000); }

如何在连接网络时以及用户登录时接收事件

我有一个运行的服务,我希望在以下情况下收到通知: a)网络已连接。 b)当用户登录机器时。 我怎样才能做到这一点? (C#.NET 2.0)

如何在VB.Net中声明lambda事件处理程序?

我相信以下VB.Net代码相当于正在进行的C#代码; 但VB.Net测试失败 – 从未调用处理Lambda的事件。 到底是怎么回事? VB.Net版本 – 失败: _ Public Class TestClass _ Public Sub EventTest() Dim eventClass As New EventClass Dim eventRaised As Boolean = False AddHandler eventClass.AnEvent, Function() (eventRaised = True) eventClass.RaiseIt() Assert.IsTrue(eventRaised) End Sub End Class Public Class EventClass Public Event AnEvent() Public Sub RaiseIt() RaiseEvent AnEvent() End Sub End Class C#版本 […]

从流中不断读取?

我有一个Stream对象偶尔会获得一些数据,但是间隔时间不可预测。 流上出现的消息是明确定义的,并提前声明其有效负载的大小(大小是每个消息的前两个字节中包含的16位整数)。 我想要一个StreamWatcher类来检测Stream何时有一些数据。 一旦它发生,我想要引发一个事件,以便订阅的StreamProcessor实例可以处理新消息。 这可以通过C#事件完成,而无需直接使用Threads吗? 看起来它应该是直截了当的,但我无法完全理解设计这个问题的正确方法。

如何忽略二进制序列化的Event类成员?

我需要避免序列化Event类成员,因为当事件由未标记为Serializable的对象处理时,序列化将失败。 我尝试在Event类成员上使用NonSerialized属性,但无法编译。 这行代码: Public Event PropertyValueChanged() 产生以下错误: 属性’NonSerializedAttribute’不能应用于’PropertyValueChanged’,因为该属性在此声明类型上无效。 Public Event PropertyValueChanged() ‘ compiles but needs the extra handling described below 有没有其他方法可以避免序列化活动成员? 如果事件未被处理,这不是问题,我可以通过在序列化之前克隆对象(并忽略事件)来解决它。 只是想知道是否有更好的方法。 谢谢。