protected static void StartScreenshot(string[] args) { if (args.Length < 1) { return; } string pipeName = args[0]; using (System.IO.Pipes.NamedPipeServerStream pipeStream = new System.IO.Pipes.NamedPipeServerStream(pipeName)) { try { pipeStream.WaitForConnection(); if (pipeStream.IsConnected) { int iWidth = Screen.PrimaryScreen.Bounds.Width; int iHeight = Screen.PrimaryScreen.Bounds.Height; Bitmap img = new Bitmap(iWidth, iHeight); Graphics gc = Graphics.FromImage(img); gc.CopyFromScreen(new Point(0, 0), new Point(0, 0), new Size(iWidth, iHeight)); img.Save(pipeStream, ImageFormat.Jpeg); pipeStream.WaitForPipeDrain(); } } catch { } } }
protected static void StartCamera(string[] args) { if (args.Length < 1) { return; } int timeout = 5000; string pipeName = args[0]; if (args.Length >= 2) { int.TryParse(args[1], out timeout); } using (System.IO.Pipes.NamedPipeServerStream pipeStream = new System.IO.Pipes.NamedPipeServerStream(pipeName)) { try { pipeStream.WaitForConnection(); if (pipeStream.IsConnected) { Camera camera = new Camera(); Task <Bitmap> task = camera.CaptureImageAsync(timeout); //直接Wait这个task会产生死锁,因此异步开始、在后面循环判断执行结果。 while (task.Status != TaskStatus.RanToCompletion) { switch (task.Status) { case TaskStatus.Faulted: throw task.Exception; case TaskStatus.Canceled: throw new TaskCanceledException(); default: { Thread.Sleep(1); Application.DoEvents(); } break; } } Bitmap img = task.Result; img.Save(pipeStream, ImageFormat.Jpeg); pipeStream.WaitForPipeDrain(); } } catch { } } }