Tag: 监视器

如何更改监视器设置以通过脚本复制和扩展

当我使用带有电视的笔记本电脑作为其第二台显示器时,我想制作一个小脚本,它将触发屏幕设置从扩展到克隆,当它设置为克隆时,应将屏幕设置设置为扩展。 我想在c#中创建它,因为它是我的主要语言,我认为它可以解决我的问题。 所以我现在已经制作了这样的控制台应用程序: class Program { static void Main(string[] args) { DisplayChanger.Start(); } private static Process DisplayChanger = new Process { StartInfo = { CreateNoWindow = true, WindowStyle = ProcessWindowStyle.Hidden, FileName = “DisplaySwitch.exe”, Arguments = “/extend” } }; } 它可以很好地创建一个新的过程。 但我的问题是,如何查看“显示”的状态? 我需要这样,所以我可以运行一个测试,看看要启动什么过程。 谢谢您的帮助 :)

Monitor.Pulse&Wait – 意外行为

http://www.codeproject.com/Articles/28785/Thread-synchronization-Wait-and-Pulse-demystified 队列: 就绪队列是等待特定锁的线程集合。 Monitor.Wait方法引入了另一个队列:等待队列。 这是必需的,因为等待Pulse与等待获取锁定不同。 与就绪队列一样,等待队列是FIFO。 推荐图案: 这些队列可能会导致意外行为。 当发生脉冲时,等待队列的头部被释放并被添加到就绪队列中。 但是,如果就绪队列中还有其他线程,则它们将在释放的线程之前获取锁定。 这是一个问题,因为获取锁的线程可以改变脉冲线所依赖的状态。 解决方案是在lock语句中使用while条件 * Q =队列。 通过这个,我明白当我打电话给Pulse ,它会在它结束前做两件事。 首先,它将一个线程从等待Q中移除到就绪Q.其次,它允许Ready Q中的一个线程(不知道谁是该线程)获得锁定; 它不关心谁获取锁(来自等待Q的线程或由于某种原因在准备好的Q中的线程)。 如果我是对的,那么为什么在Monitor.Wait帮助解决问题之前花一点时间(问题 – 即使来自等待Q的线程没有获得锁定,脉冲结束)? A. 告诉我,我是否对Monitor.Pulse的目的是正确的。 B。 为什么我需要在Monitor.Wait之前放一段while 以下答案的完整代码: class Program { static Queue queue = new Queue(); static object someMonitor = new object(); static void Main(string[] args) { Thread Thread1 = new Thread(WorkAlltheTime); Thread1.Name = […]

检查显示器是否已连接

我要制作一个简单的程序,向服务器报告监视器的状态(是开/关还是仅仅是连接)。 到目前为止,我正在使用我在另一个讨论中找到的这种方法,但它每次都只返回给我,即使我已断开我的显示器。 public static Boolean isMonitorActive() { Boolean active = false; var query = “select * from WmiMonitorBasicDisplayParams”; using (var wmiSearcher = new ManagementObjectSearcher(“\\root\\wmi”, query)) { var results = wmiSearcher.Get(); foreach (ManagementObject wmiObj in results) { // get the “Active” property and cast to a boolean, which should // tell us if the display is […]

Monitor.Wait确保重新读取字段吗?

人们普遍接受(我相信!)一个lock会强制重新加载字段中的任何值(基本上充当内存屏障或栅栏 – 我在这方面的术语有点松散,我害怕),结果是,只能在lock内访问的字段本身不需要是volatile 。 (如果我错了,就说!) 这里提出了一个很好的评论,质疑如果代码执行Wait()是否同样如此 – 即一旦它是Pulse() d,它将从内存重新加载字段,还是它们可能在寄存器(等)中。 或者更简单:字段是否需要是volatile以确保在Wait()之后恢复时获得当前值? 看着reflection器, Wait调用ObjWait ,这是一个managed internalcall调用managed internalcall (与Enter相同)。 有问题的情景是: bool closing; public bool TryDequeue(out T value) { lock (queue) { // arbitrary lock-object (a private readonly ref-type) while (queue.Count == 0) { if (closing) { // <==== (2) access field here value = default(T); return false; } […]

c#当屏幕/显示器关闭或打开电源时如何获取事件?

嗨,我一直在寻找,但我找不到答案。 我如何知道屏幕何时关闭或打开。 不是SystemEvents.PowerModeChanged。 我不知道如何检索显示/屏幕事件 private const int WM_POWERBROADCAST = 0x0218; private const int WM_SYSCOMMAND = 0x0112; private const int SC_SCREENSAVE = 0xF140; private const int SC_CLOSE = 0xF060; // dont know private const int SC_MONITORPOWER = 0xF170; private const int SC_MAXIMIZE = 0xF030; // dont know private const int MONITORON = -1; private const int […]

.NET线程如何等待不属于任何线程的syncblk?

我的应用程序中有一个崩溃转储显示了一堆等待syncblk的线程,而syncblk显示它没有拥有线程。 怎么可能? 我试图重现测试应用程序中的症状,我无法弄清楚产生该结果可能发生什么….拥有拥有线程退出或死亡而不释放syncblk仍显示为拥有该对象,只是线程是“XXX”….我已经测试使用完全管理的优雅退出和硬线程终止通过pinvoke ….我测试了一堆不同的等待组合没有脉冲,不匹配进入和退出…什么都没有产生一个syncblk阻止线程,并没有显示所有者…..我的想法已经用完了 这是我正在尝试复制的crashdump的输出:(注意索引#1236) 0:000> !syncblk Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner 784 0000000004f12eb0 3 1 000000000508a460 32a8 68 00000001a0a20510 966 0000000004f06928 1 1 00000000052c5da0 2380 114 00000001df3080f8 1085 0000000004f23088 1 1 00000000052c8080 496c 120 00000001a0325238 1144 0000000005160d20 1 1 00000000050968b0 d74 56 00000000ff61b570 1151 0000000004f0c2c8 1 1 000000000508d8b0 3f64 77 […]

WMI获取所有监视器不返回所有监视器

我正在使用WMI Win32_MonitorDesktop来获取系统上的所有监视器信息。 但是它只返回一个。 我在几台计算机上试过它,它们肯定有多个显示器,连接和工作。 ManagementObjectSearcher monitorObjectSearch = new ManagementObjectSearcher(“SELECT * FROM Win32_DesktopMonitor”); foreach (ManagementObject monitor in monitorObjectSearch.Get()) { Debug.WriteLine(monitor[“Description”]); } 有谁知道为什么我只返回1台显示器? 另外,如果我将monitorObjectSearch.Get()的返回值赋给变量,我无法在立即窗口中计算Count属性,因为该函数总是超时。

为什么每个人都说SpinLock更快?

我在互联网上阅读了很多文档,文章和post。 几乎每个人和每个地方都认为SpinLock对于短时间运行的代码来说速度更快,但我做了一个测试,在我看来,简单的Monitor.Enter比SpinLock.Enter运行得更快(Test是针对.NET 4.5编译的) using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; using System.Linq; using System.Globalization; using System.ComponentModel; using System.Threading; using System.Net.Sockets; using System.Net; class Program { static int _loopsCount = 1000000; static int _threadsCount = -1; static ProcessPriorityClass _processPriority = ProcessPriorityClass.RealTime; static ThreadPriority _threadPriority = ThreadPriority.Highest; static long _testingVar = 0; static void […]

你如何找到锁的所有者(监视器)?

有没有办法发现当前拥有锁的线程? 具体来说,我正在寻找一些代码来打印阻止锁被采取的线程。 我想尝试锁定给定的超时,然后报告哪个线程阻止锁被采取。

为什么使用平均值时图表会很尖锐?

我在我的WCF服务中使用messageInspectors来测量每个服务方法的经过时间,如下所示: public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState) { if (_activated) { _startTime.Stop(); PerformanceCounterHandler.Instance.SetAveragePerformanceCounter(operationName, _startTime.ElapsedTicks); } } public object BeforeCall(string operationName, object[] inputs) { Guid correlationState; if (_activated) { correlationState = Guid.NewGuid(); _startTime = new Stopwatch(); _startTime.Start(); return correlationState; } return null; } 这是计数器的注册方式 foreach (string methodName in ServiceMethodNames) { counter = […]