检测目录中的变化
我需要为任何文件操作监视文件夹及其子目录(添加/删除/重命名).我已经阅读了有关FileSystemWatcher的信息,但是我想在每次运行程序或按下"检查更改"按钮之间进行监视(FSW似乎更注重运行时检测).我的第一个想法是通过所有(子)目录和每个文件进行迭代.然后,将所有哈希(已被订购)串联并进行串联.当我想检查更改时,我重复该过程并检查哈希是否相同. 这是这样做的有效方法吗? 另外,一旦检测到更改,我如何找到已添加,删除或重命名的哪些文件? 作为附带说明,只要这些脚本不需要最终用户即可安装任何内容,我就不介意使用脚本来执行此操作,并且脚本可以将我的C#应用​​通知我的更改. 解决方案 我们通过将所有发现的文件存储在数据库中以及它们的最后一个修改时间来处理此操作. 在每个通过文件中,我们检查了每个文件的数据库:如果它在数据库中不存在,则是新的,如果它确实存在,但是时间戳是不同的. 还有一个选项可以通过在通过之前将数据库中的所有文件标记为tobedeleteed
12 2024-04-25
编程技术问答社区
WCF服务中监控类的同步问题
我有一个自托管的WCF服务,我遇到了以下问题:创建服务合同方法中的服务tryenter调用的实例后15分钟不断返回false,但是Main功能中的Trunenter调用,该函数也使用通过显示器类同步,返回true. 这是我的应用程序的描述和错误: 我正在Windows XP SP2中的Visual Studio 2008(C#)中开发自托管WCF服务. 主机的ServiceHost实例是在主函数开头创建的.主函数运行一段时间(true)循环,在此期间执行定期读取,写作,维护等. 有一个静态的对象集合(可以随着时间的推移添加或删除),充当工作线程的容器.其中一些线程执行了主要功能要求的定期工作,而另一些线​​程则执行按需读取和写入远程设备.使用Monitor类(Truenter和Exit方法)在这些对象上进行同步锁定.这些对象也可以通过使用相同功能的服务合同方法(服务)访问.在主函数和服务方法之间进行同步.当创建服务的实例时,它将以设计的性能精确15分钟,然后在指定的超时到期后,每个
6 2024-04-21
编程技术问答社区
最近的OpenHardwareMonitor示例代码 C#
有人知道我可以在哪里找到使用openhardwaremonitor.dll的任何近期示例. 我尝试了一个简单的实现,但无法获得CPU温度.我知道库必须拥有它,因为应用程序本身会得到温度. 我感觉您必须注册事件才能阅读某些事情,但我发现很难找到一个很好的例子. Computer myComputer = new Computer(); myComputer.Open(); foreach (var hardwareItem in myComputer.Hardware) { if (hardwareItem.HardwareType == HardwareType.CPU) { foreach (var sensor in hardwareItem.Sensors)
8 2024-04-20
编程技术问答社区
Monitor.Pulse & Wait-意外的行为
在/atricles/28785/thread同步等待和脉 - 脉 - 队列: 现成的队列是正在等待一个线程的集合 特定锁.监视器.等待方法介绍了另一个队列: 等待队列.这是必需的,因为等待脉冲是不同的 从等待获得锁.就像准备好队列一样,等待 队列是fifo. 推荐模式: 这些队列可能导致意外的行为.发生脉冲时, 等待队列的头部已释放,并添加到准备就绪 队列.但是,如果准备队列中还有其他线程,则 将在发布的线程之前获取锁.这是一个 问题,因为获取锁的线可以改变状态 脉冲线依赖.解决方案是使用一段时间 锁定语句中的条件 *q =队列. ,我明白,当我调用Pulse时,它在结束之前做了2件事.首先,它将一个线程从等待Q删除到就绪Q.其次,它可以让一个线程(不知道该线程是谁是该线程),即准备好Q中获取了锁;它不在乎谁获取锁(由于某种原因,来自等待Q或准备Q中的线程的线程). 如果我对此说对,则为什么在Monitor.Wait之前将A while放在有助
8 2024-04-20
编程技术问答社区
如何用.NET关闭特定的显示器?
好吧,我知道有关此主题的帖子很多.但是,它们都没有提供解决我问题的解决方案:我不想关闭我的显示器,我希望我的代码关闭特定的监视器.大多数人所指的URL, http://fci-h.blogspot.com/2007/03/turn-furn-cound-your-monitor-monitor-via-code-c.html ,在这里无济于事,因为它关闭了所有显示器. 所以,我有笔记本电脑屏幕和其他外部监视器.当我看电影时,我将显示器切换到外部显示器,笔记本电脑的屏幕变黑了,但是它仍然在黑暗中发光.我想关闭它.有人可以帮忙吗? 编辑:是否有任何方法可以解决此问题,这意味着它不必用.NET写入.基本上,我只需要一个能够交替关闭特定监视器的.EXE文件. 解决方案 看起来没有关闭特定显示器的好方法,但是可以将笔记本电脑的背光设置为最小亮度.根据您拥有哪种版本的Windows,有不同的方法: 发送ioctl_vide_video_set_set_display_bri
8 2024-04-19
编程技术问答社区
如何找到锁的主人(监视器)?
有没有办法发现目前拥有锁的线程? 具体来说,我正在寻找一些代码来打印出阻止锁定的线程.我想尝试锁定给定的超时,然后报告哪个线程阻止锁定锁. 解决方案 否.只需写代码: private int lockOwner; private object lockObject = new object(); ... void foo() { lock(lockObject) { lockOwner = Thread.CurrentThread.ManagedThreadId; // etc.. } } 有一种原本没有证件的方法来获取锁所有者,它不能保证工作,但通常可以.当您有断点活动时,请使用调试 + Windows + Windows +内存 +内存.在地址输入框中,键入锁定对象(" LockObject")的名称,然后按Enter.地址框更改为内存中对象的地址.编辑并将" -4"附加到地址,按Enter.转储中的前4个字节可为您提
4 2024-04-18
编程技术问答社区
C#有选择地关闭显示器
C#中是否有一种方法可以识别连接到系统的所有监视器并选择要打开,关闭或低功率的监视器?我在以前的问题上找到了所有监视器. 解决方案 您可以使用 http://pinvoke.net/default.aspx/user322 .enumdisplaymonitors ?似乎一旦获得句柄,就可以像回复以下问题中使用的PinVoke ... 打开/关闭监视器
10 2024-04-16
编程技术问答社区
使用.NET/WMI获取PC的监控信息
无论如何是否使用WMI/.NET来获取监视信息,例如制造商,序列号,监视器大小等? ? 使用脚本也是一个选项,或者我可以直接查询注册表以获取此信息? SELECT * FROM Win32_DesktopMonitor在这种情况下,我并没有真正返回我的任何有用信息. 解决方案 您可能想尝试此 /Maxanderson95/get-monitor-information/master/get-monitor.ps1 欢呼 其他解决方案 嘿,我将此工具用于我的许多WMI工作,尤其是在原型型和创建POC时.. 此工具非常适合为C#和VB.NET中的任何WMI查询或方法调用创建快速控制台应用 try { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2",
6 2024-04-15
编程技术问答社区
.NET线程怎么可能在一个不属于任何线程的syncblk上等待?
我的应用程序中有一个崩溃转储,显示了一堆线程在Syncblk上等待的线程,而Syncblk则表明它没有拥有线程.怎么可能?我正在尝试在测试应用中重现症状,但我无法弄清楚可能会产生该结果的情况....让所有线程退出或死亡而无需释放Syncblk仍然显示为拥有该对象,只是螺纹是" xxx"....我已经使用PINVOKE进行了完全管理的优美出口和硬线终止进行了测试....我测试了一堆不同的等待的组合,没有脉冲,不匹配的Enter and Exits ...没有什么能产生一个syncblk,它可以阻止线程并显示没有所有者.....我用完了想法 这是我正在尝试复制的crastdump的输出:(注意索引#1236) 0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 784 0000000004f12eb0
6 2024-04-15
编程技术问答社区
C#中的条件变量
c#? 中使用的条件变量和监视器是 有人可以给我一个例子吗? 解决方案 您仅用于发出.NET信号的条件变量的等效物是抽象的Waithandle类.它的实际实现是手动Resetevent和Autoresetevent类. 您用作监视器的条件变量需要system.threading.monitor. c#lock语句使其非常易于使用,它可以确保在没有明确编程exit()呼叫的情况下将监视器退出. 其他解决方案 其他解决方案 您可以使用锁定对象,该对象充当监视器类的句法糖. lock(someObject) { // Thread safe code here. } /en-us/library/c5kehkcz%28vs.80%29.aspx
12 2024-04-15
编程技术问答社区
如何按用户名监控文件服务器上的文件访问和变化?
我被要求找到一种在公司共享文件服务器(简单的Windows共享目录)上特定文件夹中的文件的更改(修改,重命名,删除,移动)的方法.我在c#中写了一个简单的应用监视这些更改并通知其特定电子邮件地址. 我现在想知道的是如何找出进行这些更改的用户/计算机的名称/IP.有什么想法吗? 作为编写自己的软件的替代方法,是否有任何支持此功能的好(可能是免费的)软件? 解决方案 使用审核 - 当您获取文件/文件夹的属性时,它在"安全"选项卡上.您指定要审核哪些访问权限的用户.您还必须使用安全策略MMC快照打开审核.审核将最终进入安全日志. MS的详细说明: 如果您愿意,您的C#应用​​程序可以从安全事件日志中获取事件.
4 2024-04-12
编程技术问答社区
Monitor.Wait是否需要同步?
我已经开发了一个通用的生产商 - 消费者队列,该队列通过以下方式通过监视器进行脉冲: 入口: public void EnqueueTask(T task) { _workerQueue.Enqueue(task); Monitor.Pulse(_locker); } Dequeue: private T Dequeue() { T dequeueItem; if (_workerQueue.Count > 0) { _workerQueue.TryDequeue(out dequeueItem); if(dequeueItem!=null) return dequeueItem; } while (_workerQueue.Count =
4 2024-04-12
编程技术问答社区
查找所有显示器的编号和分辨率
一个民意调查窗口如何查看附加了哪些监视器以及他们在哪些分辨率上运行? 解决方案 在C#中: C0>类 代表单个系统上的显示设备或多个显示设备.您想要Bounds属性. foreach(var screen in Screen.AllScreens) { // For each screen, add the screen properties to a list box. listBox1.Items.Add("Device Name: " + screen.DeviceName); listBox1.Items.Add("Bounds: " + screen.Bounds.ToString()); listBox1.Items.Add("Type: " + screen.GetType().ToString()); listBox1.Items.Add("Working Area: " + screen.WorkingArea.To
6 2024-04-11
编程技术问答社区
使用C#在活动目录中注册变更通知
此链接 http://msdn.microsoft.com/en-us/library/aa772153(vs.85).aspx 说: 您可以在单个LDAP连接上注册最多五个通知请求.您必须有一个专用线程,以等待通知并迅速处理.当您调用ldap_search_ext函数以注册通知请求时,该功能会返回识别该请求的消息标识符.然后,您使用ldap_result函数等待更改通知.发生更改时,服务器会向您发送一个LDAP消息,其中包含生成通知的通知请求的消息标识符.这会导致LDAP_RESULT函数使用搜索结果返回,以识别更改的对象. 我找不到通过.NET文档查看的类似行为.如果有人知道如何在C#中做到这一点,我将非常感谢.我希望查看系统中所有用户的属性何时更改,以便我可以根据更改的自定义操作执行自定义操作. 我已经浏览了stackoverflow和其他没有运气的来源. 谢谢. 解决方案 我不确定它可以完成您的需求,但请看一下 http://dunnry.com/
6 2024-04-11
编程技术问答社区
CPU温度监测
对于一个编程项目,我想访问我的CPU和GPU的温度读数.我将使用C#.从各种论坛上,我的印象是您需要特定的信息和开发人员资源来访问各种董事会的信息.我有一个MSI NF750-G55板. MSI的网站没有我想要的任何信息.我尝试了他们的技术支持,与我交谈的代表说他们没有任何此类信息.必须有一种获取该信息的方法. 有什么想法吗? 解决方案 至少在CPU方面,您可以使用WMI. 名称空间\对象是root\WMI, MSAcpi_ThermalZoneTemperature 示例代码: ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", "SELECT * FROM MSAcpi_ThermalZoneTemperature"); ManagementObjectCollection
6 2024-04-11
编程技术问答社区
监视器与锁
何时使用Monitor类或lock lock关键字用于c#? 中的线程安全性 编辑: 从到目前为止,似乎lock对于Monitor类的一系列呼叫而言是短的手.锁定的锁定为什么?或更明确, class LockVsMonitor { private readonly object LockObject = new object(); public void DoThreadSafeSomethingWithLock(Action action) { lock (LockObject) { action.Invoke(); } } public void DoThreadSafeSomethingWithMonitor(Action action) { // What goes here ? } } 更新 感谢大家的帮助:我已经发
16 2024-04-10
编程技术问答社区
启动一个应用程序并将其发送到第二个显示器?
有什么方法可以在另一个屏幕中通过进程开始/午餐? 有人问在这里没有答案. 注意:这不是我的应用中的表单,我询问在另一个屏幕上运行外部程序! 解决方案 由于窗口不是您的,因此您只能通过调用Windows API来移动它.您必须这样做: 启动该过程. 使用 FindWindow FindWindow 将手柄检索到窗口.如果窗口还不存在,则该过程尚未创建它.睡500ms,然后重试. (但是不要进入无限循环;如果您在合理的超时后找不到窗口,请停止.) 使用 SetWindowPos SetWindowPos SetWindowPos 更改窗口的位置. 如果您不知道窗口的标题,则不能使用FindWindow.在这种情况下, 启动该过程并通过检索Process.Handle. 获取过程处理 使用 EnumWindows EnumWindows 检索所有窗口.对于每个窗口,使用 使用 SetWindowPos SetWindowPos Set
8 2024-04-10
编程技术问答社区
锁定(监控)在.NET中的内部实现
为了掌握某些技术,您必须知道它是如何在一个抽象级别降低的.在多线程编程的情况下,很高兴了解同步原始图. 这是.NET中如何实现锁定(监视器)的问题? 我很感兴趣: - 它使用OS对象吗?; - 它需要用户模式还是内核模式?; - 等待锁的线程的开销是什么? - 在什么情况下,可能会违反等待锁的线程排队? 更新: "如果多个线程争夺了锁,它们将在"就绪队列"上排队,并以先到先得的前提为基础授予锁.注意:Windows行为的细微差别,CLR表示队列的公平有时可能会被违反. 解决方案 经过一些调查,我发现了我的问题的答案.总的来说,Codleinchaos和Henk Holterman是对的,但这是一些细节. 当线程开始使用其他线程锁定锁定时,它首先会暂时使用自旋等环路来获得锁定.所有这些操作都在用户模式中执行.然后,如果没有成功的OS内核对象Event创建,则将线程切换到内核模式并等待此Event的信号. 所以回答我的问题是: 1.在更好的情况下否,
10 2024-04-10
编程技术问答社区
同时对多个地址进行监控/等待指令?
我在监视单个地址时已经验证了显示器/MWAIT指令的使用情况.但是我想知道它是否可以同时监视多个地址.可以同时监视多少个地址? 例如,我尝试使用以下代码监视变量A和变量B,并且我发现当A或B更改时,处理器可以醒来.是否有有关如何使用Monitor/Mwait监视多个地址的任何官方指示. monitor(&a, 0, 0); monitor(&b, 0, 0); mwait(0, 0); 解决方案 一次只能监视一个地址.执行监视器指令替换了先前监视的地址. 不过,它不会监视一个字节地址;这是一个范围.可以使用CPUID发现范围的大小. 通常是64个字节(单个缓存线).这就解释了为什么您观察到它在A和B. 上触发的原因
4 2024-04-09
编程技术问答社区
如何在Windows中查询主显示器的NATIVE硬件分辨率?
我需要在Windows下找到附件的LCD监视器的"最佳"或本机分辨率(然后我会以编程方式设置并知道该怎么做.)让我重复一遍,我不需要当前的Windows分辨率,也不需要需要担心CRT/投影仪. 我已经看到它与此程序一起使用,所以尽管有反对者,我知道这是可能的: 最好直接与监视器交谈并查询EDID信息.但是,我已经看到它在注册表中被缓存,并且不会从HKLM \ System \ CurrentControlset \ Enum \ Display挖掘出来,但无法弄清楚如何与当前的主监视器匹配数据. 我确实找到了此C程序: c6d7c1cfa78f.aspx 不幸的是,我在将C程序转换为Python时遇到了很多麻烦,因为相关代码似乎不在Win32All模块中.我会尝试编译它,但没有磁盘空间用于大型编译器,并且多年来没有使用C.我也有一些元素的ctypes. 我的计划B将是使用EnumdisPlaySettings()找到解决方案的最大价值并将其设置为.在PC上,我尝
8 2024-04-08
编程技术问答社区