Tag: 事件

C#计时器在间隔时间之前被解雇

从Windows服务使用System.Threading.Timer (.NET 2.0)时,我们遇到了以下问题。 有大约12个不同的计时器对象.. 每个计时器都有适当的时间和间隔。 这是正确设置的。 观察到在3到4小时后,定时器在它们的间隔过去之前开始发信号。 例如,如果计时器应该在4:59:59发出信号,则会在7秒前的4:59:52发出信号。 有人能告诉我这种行为的原因是什么,解决方案是什么? 谢谢,斯瓦蒂

任何人都知道为什么我无法在C#中以编程方式访问winevt文件夹?

我一直在尝试使用C#以编程方式进入’C:\ Windows \ System32 \ winevt \ Logs’文件夹,因此我可以将事件日志文件复制到备份目录,然后将事件日志清除为每日备份的一部分设备,但我似乎无法访问此目录。 我已经尝试将应用程序清单更改为在administrator()下运行,这给了我执行程序时的UAC提示,我甚至在NT AUHORITY \ SYSTEM身份下生成一个shell来执行代码但是它仍然说这是一条无效的路径,即使我可以手动进入管理shell和SYSTEM shell下的目录。 我把它隔离到了不能进入winevt目录。 我使用此代码来查看是否可以访问该目录。 Environment.CurrentDirectory = System.Environment.SystemDirectory + @“\ winevt \”; 只收到 System.IO.DirectoryNotFoundException:找不到路径’C:\ Windows \ system32 \ winevt \’的一部分。 at System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)at System.IO.Directory.SetCurrentDirectory(String path)at System.Environment.set_CurrentDirectory(String value)at dev_EventLog.Program.Main(String [] args)in D:\ SourceCodes \ dev_EventLog \ dev_EventLog \ Program.cs:第30行 我已经尝试了许多不同的方法来指定目录,但它们都是一样的,我也尝试过不同的System32子文件夹,而且我尝试过winevt是唯一一个这样做的人。 这让我很疯狂,任何人都知道为什么这不能在C#下运行,或者我被迫使用VBScript来执行此操作,因为以下VBScript代码可以复制事件日志文件。 dim filesys […]

上升的事件没有阻塞并以正确的顺序接收事件

这首先需要一些解释。 有一个工作线程必须引发一些事件: Task.Run(() => { for(int i = 0; i < 123456789; i++) { … // some job OnSomeEvent(i); } }); 同步上升事件将阻止作业,直到所有事件处理程序完成: void OnSomeEvent(int i) => SomeEvent?.Invoke(this, new SomeEventArgs(i)); 异步事件上升不会再阻止工作了(耶!) void OnSomeEvent(int i) => Task.Run(() => SomeEvent?.Invoke(this, new SomeEventArgs(i))); 但现在还有另一个问题:未按正确顺序收到事件: OnSomeEvent(1); OnSomeEvent(2); OnSomeEvent(3); … // event handler SomeEvent += (s, e) => Console.WriteLine(eI); // possible […]

在一天中的特定时间举办活动的好方法?

我有一个应用程序,需要在白天的某些时间发起几个事件 – 时间都由用户定义。 我可以想到几种方法,但没有一种方法可以做得太好。 时间不必具有特别高的分辨率 – 一分钟左右每种方式都可以。 我的想法: 当应用程序启动时,所有时间都会读取并启动计时器,这将在适当的时间打勾 关闭计时器,每分钟左右检查’当前事件’ 为任何更好的解决方案。

当另一个进程退出时,在C#中引发事件

我不知道这个问题是否已被提出,但我找不到任何内容,所以如果你能找到一些东西,请引导我朝着正确的方向前进。 基本上,我想在我的当前C#程序中添加一个事件,以便在另一个指定进程(“example.exe”)退出时引发。 那可能吗? 如果那是不可能的,那么,当通过直接路径(“C:\ somefolderpaths … \ example.exe”)指定的进程退出时,是否存在引发事件的方法? 要添加:我的程序不启动进程example.exe。

如何在Windows窗体应用程序中实现控件validation?

我试图更好地了解validation如何在Windows窗体应用程序中工作。 互联网上充满了琐碎的例子,但我找不到一个解释控制validation的非平凡的例子。 无论如何,多亏了SwDevMan81和Hans Passant,我从一个比昨天更好的地方开始。 “真正的应用程序”有一个包含许多TextBox控件的对话框。 每个控件都实现Validating事件。 正如您在示例中所看到的, ValidateChildren作为Click事件的结果被调用,导致Validating事件被发送到每个控件。 该应用程序还使用ErrorProvider控件来提供用户反馈。 昨天,我不明白如何使用Ok按钮Click事件来执行此validation。 今天,我的对话框按预期工作。 单击“确定”按钮会导致ErrorProvider执行控件无效且对话框未意外关闭的操作。 因此,虽然这似乎有效,但我感觉我“在线外”。 在Windows窗体应用程序中是否有用于控制validation的“最佳实践”文档/站点? 在许多令我困惑的事情中,当Ok按钮DialogResult属性设置为返回DialogResult.OK时,我无法找到对话框行为的解释。 为什么设置此属性会干扰validation? (尝试使用和不使用该行的示例,看看我的意思。) 我昨天的问题(看起来似乎)主要源于不了解ValidateChildren方法以及我将Ok按钮DialogResult属性设置为DialogResult.OK。 将此属性设置为DialogResult.None似乎更改了Form类的一些自动行为。 TIA using System; using System.ComponentModel; using System.Windows.Forms; namespace ConsoleApp { class Program { static void Main( string[] args ) { Dialog dialog = new Dialog(); if( dialog.ShowDialog() == DialogResult.OK ) Console.Beep(); } } public class Dialog […]

停止在C#中调试事件

当应用程序关闭时,如何或在何处运行命令,即使是调试停止? 我需要在任何出口执行命令,即使用户是开发人员并单击Visual Studio上的“停止调试”按钮。 我尝试着 Application.ApplicationExit += new EventHandler(this.OnApplicationExit); 但它不起作用。 也许我错了或不是活动。 我正在使用Winforms而不是,在Form Close上不能成为事件。 我正在使用Visual Studio 2005 Net Framework 2.0(按客户端要求),但仅供参考。 也许我可以改写这个吗?: public static void Exit();

单击控件内的文本时,用户控件单击事件不起作用?

我有一个名为GameButton的用户控件,里面有一个标签。 当我将用户控件添加到我的表单并向其添加单击事件时,单击自定义按钮的背景时会触发它,而不是标签中的文本? 如果不在用户控件代码中添加一堆点击事件,我该如何解决这个问题? 编辑:UI框架:winforms

C#:线程安全事件

下面的实现是否是线程安全的? 如果不是我错过了什么? 我应该在某处使用volatile关键字吗? 或OnProcessingCompleted方法中的某个锁? 如果是这样,在哪里? public abstract class ProcessBase : IProcess { private readonly object completedEventLock = new object(); private event EventHandler ProcessCompleted; event EventHandler IProcess.ProcessCompleted { add { lock (completedEventLock) ProcessCompleted += value; } remove { lock (completedEventLock) ProcessCompleted -= value; } } protected void OnProcessingCompleted(ProcessCompletedEventArgs e) { EventHandler handler = ProcessCompleted; if (handler […]

C#中的RaiseEvent

(我知道标题听起来很容易,但坚持 – 这可能不是你认为的问题。) 在VB.NET中,我能够编写自定义事件。 举个例子,我有一个单独的线程会定期引发事件,在那个事件上需要更新GUI。 我不希望繁忙的线程打扰UI计算,我不想把Me.Invoke(Sub()…)放在事件处理程序中,因为它也是从GUI线程调用的。 我想出了这个非常有用的代码。 GUI线程将设置EventSyncInvoke = Me(主窗体)。 然后线程可以像往常一样简单地引发事件TestEvent,没有特殊代码,它将在GUI线程上无缝执行: Private TestEventDelegate As EventHandler Public EventSyncInvoke As System.ComponentModel.ISynchronizeInvoke Public Custom Event TestEvent As EventHandler AddHandler(value As EventHandler) TestEventDelegate = [Delegate].Combine(TestEventDelegate, value) End AddHandler RemoveHandler(value As EventHandler) TestEventDelegate = [Delegate].Remove(TestEventDelegate, value) End RemoveHandler RaiseEvent(sender As Object, e As System.EventArgs) If EventSyncInvoke IsNot Nothing Then EventSyncInvoke.Invoke(TestEventDelegate, […]