Tag: events

委派活动

这是一个C#问题。 我有一个用户控件A. A包含另一个用户控件B. B有一个名为BEvent的事件。 我想在A中公开这个事件,所以任何使用控件A的人都可以订阅BEvent。 如何编写代码来实现此设计? 谢谢。

在CQRS中注册EventHandler

我正在尝试使用CQRS和DDD模拟购买域,我知道我在域中引发事件但我不知道在我使用命令时在哪里注册它们。 应该在命令处理程序中注册事件处理程序吗? 或者我误解了一些东西。 这是我的过程,你可以帮助建模吗? 最终确定采购订单命令,比命令处理程序最终确定订单(从存储库获取订单,更改其状态并保存回db),订单最终事件发生在域模型中,而不是事件处理程序使用id及其行项找到此订单,查找它供应商联系信息(可能是电子邮件甚至是外部服务)并通知他新的采购订单。 我的命令和命令处理程序在应用程序层中(事件处理程序也应该在这里?)。 域层中的域模型,事件和IRepositories。 基础架构层中的存储库实现。 域模型(跳过大多数属性): public class PurchaseOrder { public PurchaseOrder(int purchaseOrderID, int supplierID, bool isOrderFinalized) { PurchaseOrderID = purchaseOrderID; SupplierID = supplierID; IsOrderFinalized = isOrderFinalized; } public int PurchaseOrderID { get; private set; } public int SupplierID { get; private set; } public bool IsOrderFinalized { get; private set; } […]

用事件实现观察者模式

我正在开发一个Silverlight应用程序,我过度使用了观察者模式。 在我的实现中,我创建了两个接口IObservable和IObserver 。 前者包含将观察者附加到观察者的方法。 后者有一个方法Notify(IObservable observable, …) ,当observable改变了它的状态时,observable通过observer.Notify(this, …)传递自身作为参数。 现在我偶然发现了“事件”,对我而言,似乎这就是观察者模式的实现,只是代表而不是前面提到的Notify -method。 是对的吗? 我不太了解代表,也不想花几个小时重写我的代码只是为了最终得到与现有代码完全相同的代码。 另一方面,事件可能优于基于接口的观察者模式。 我错过了什么吗?

如何确定c#中的dns变化?

我想监视dns地址的变化。 所以我需要跟踪dns的变化。 我正在用线程做它现在。 我得到dns并保存文件,然后我每10秒比较一次,但我需要更具体的解决方案。 例如,那有什么事吗? 这是代码: GetDns: public List GetDns() { List dns = new List(); NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface networkInterface in networkInterfaces) { if (networkInterface.OperationalStatus == OperationalStatus.Up) { IPInterfaceProperties ipProperties = networkInterface.GetIPProperties(); IPAddressCollection dnsAddresses = ipProperties.DnsAddresses; foreach (IPAddress dnsAdress in dnsAddresses) { dns.Add(dnsAdress.ToString()); } } } return dns; } 这是比较: string[] xmlDns […]

如何防止事件导致自己的事件在C#中触发?

我有一个带有复选框的树视图,我有“AfterCheck”事件的以下处理程序: private void trvAvailableFiles_AfterCheck(object sender, TreeViewEventArgs e) { if (!_isCheckingInProgress) { trvAvailableFiles.BeginUpdate(); var nodePath = e.Node.Tag.ToString(); bool isChecked = e.Node.Checked; e.Node.Nodes.Clear(); try { _fileTreeLogic.GetChildNodes(e.Node, true); e.Node.ExpandAll(); _isCheckingInProgress = true; SetChildrenCheckState(e.Node, isChecked); _isCheckingInProgress = false; } finally { trvAvailableFiles.EndUpdate(); } } } 如果仔细观察,你会发现我正在检查“_isCheckingInProgress”。 如果不是,那么我继续并展开所有节点并调用SetChildrenCheckState()方法。 我遇到的问题是SetChildrenCheckState()随后将导致每个子节点都为其自己的节点触发AfterCheck事件。 我的问题是,是否有更简洁的方法允许第一个AfterCheck事件发生而不是后续事件? 我必须有一个实例bool变量来检查和设置似乎有点hackish。

从F#中消耗C#事件

接下来的function反应式编程教程,其中事件流( Observable )直接从System.Timers.Timer.Elapsed事件创建。 let timer = new System.Timers.Timer(float 1) let observable = timer.Elapsed observable |> Observable.subscribe … 在C#定义class public delegate void OnMessageDelegate(Message message); public class Notifier : INotifier { public event OnMessageDelegate OnMessage; public void Notify(Message message) => OnMessage?.Invoke(message); } 将相应的Dll引用到F#项目中并尝试从Notifier.OnMessage事件创建Observable let Start (notifier : Namespace.Notifier) = notifier.OnMessage |> Observable.subscribe (fun ms -> … 0 […]

C#后台工作者除了我自己以外没有触发任何电脑上的dowork事件

我的一个应用程序中的后台工作者有一个非常奇怪的问题。 我最近稍微修改了一些GUI修复程序但现在当另一台PC上的某人运行.exe或安装我的OneClick部署时,后台工作程序不会进入dowork事件。 两个版本之间的逻辑没有改变。 我做了一个比较,除了添加更多的错误记录,没有任何改变。 我已经在dowork事件中包含了消息框和断点,但除了在我自己的PC上之外,它从未进入任何地方。 即使我远程调试它也不会进入DoWork事件 有什么建议? 按钮单击甚至调用runworkerasync事件 private void ScanButton_Click_1(object sender, RoutedEventArgs e) { Scan = new BackgroundWorker(); Scan.WorkerReportsProgress = true; Scan.DoWork += new DoWorkEventHandler(Scan_DoWork); Scan.ProgressChanged += new ProgressChangedEventHandler(Scan_ProgressChanged); Scan.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Scan_RunWorkerCompleted); Scan.RunWorkerAsync(); } 下面是运行DoWork事件的代码。 我已经删除了它为简单起见所做的其他function。 它所做的就是运行一个函数,该函数返回一个字符串并将其放在名为scanresults的列表中。 private BackgroundWorker Scan; public void Scan_DoWork(object sender, DoWorkEventArgs e) { System.Windows.Forms.MessageBox.Show(“Inside the DoWork”); BackgroundWorker bw = […]

控制台应用程序C#的关闭事件

我怎么知道我的C#控制台应用程序什么时候停止? 有没有这样的事件? 谢谢!

文件夹上的C#(outlook加载项)上下文菜单

在我的VSTO outlook插件中,我正在尝试放置一个按钮,当我右键单击文件夹时会显示该按钮。 在我的启动function中我有这个: Outlook.Application myApp = new Outlook.ApplicationClass(); myApp.FolderContextMenuDisplay += new ApplicationEvents_11_FolderContextMenuDisplayEventHandler(myApp_FolderContextMenuDisplay); 然后我有那个处理程序… void myApp_FolderContextMenuDisplay(CommandBar commandBar, MAPIFolder Folder) { var contextButton = commandBar.Controls.Add(MsoControlType.msoControlButton, missing, missing, missing, true) as CommandBarButton; contextButton.Visible = true; contextButton.Caption = “some caption…”; contextButton.Click += new _CommandBarButtonEvents_ClickEventHandler(contextButton_Click); } 最后点击的处理程序…. void contextButton_Click(CommandBarButton Ctrl, ref bool CancelDefault) { //stuff here } 我的问题是如何将myApp_FolderContextMenuDisplay中的contextButton_Click MAPIFolder Folder发送到contextButton_Click […]

事件参数; “发件人为对象”,或“发件人为T”?

当我为业务对象编写公共事件时,除了附加的特定参数之外,我还习惯于将实例作为“ sender as Object ”传递。 我现在问自己为什么不指定课程 ? 所以对你有更多的经验; 您是否曾在事件中将不同的类作为发送者传递 ? 如果是这样,那么当你可以/不好的时候,你的决定标准是什么?