C# 流桌面 Activity

C# Stream Desktop Activity

为了简单起见,我决定采用这种方法。服务器在启动并单击“开始”按钮时,每秒捕获一次桌面并保存一个图像文件。启动客户端并单击“查看桌面”按钮时,每 500 毫秒将图像读入图片框。

但我在客户端表单中显示图像时遇到问题。它显示初始图像但不显示任何其他后续图像,只是保持静止。

我试过 Refresh() 和 Invalidate() 但没有任何效果。你们能帮我解决一下吗

服务器代码

using System;
using System.Windows.Forms;
using System.IO;
using System.Timers;

namespace SMSServer
{
    public partial class SMSServerForm : Form
    {
        private static System.Timers.Timer txtTimer;
        private CaptureDesktop cd;
        public SMSServerForm()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
           cd = new CaptureDesktop();
           txtTimer  = new System.Timers.Timer(1000);
           txtTimer.Elapsed += txtTimer_Elapsed;
           txtTimer.Enabled = true;                      
        }

        private void txtTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            cd.CaptureDesktopAsImage();
        }        
    }
}

客户代码

using System;
using System.Windows.Forms;
using System.IO;
using System.Timers;
using System.Drawing;

namespace SMSClient
{
    public partial class SMSClientForm : Form
    {
        private static System.Timers.Timer txtReadTimer;
        public SMSClientForm()
        {
            InitializeComponent();
        }


        private void txtReadTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            desktopPictureBox.Invalidate();
            desktopPictureBox.Image =  Image.FromFile(Directory.GetCurrentDirectory() + @"\CurrentImage.png");
        }

        private void btnView_Click(object sender, EventArgs e)
        {
            txtReadTimer = new System.Timers.Timer(500);
            txtReadTimer.Elapsed += txtReadTimer_Elapsed;
            txtReadTimer.Enabled = true;
        }
    }
}

为了捕获桌面,我使用了此处描述的方法: Capture desktop C# including semitransparent

更新图像后尝试方法 PictureBox.Refresh()(继承自 Control)。

Image.FromFile() 锁定文件,因此您的捕获程序可能无法在磁盘上更新它。 Open Image from file, then release lock?

这里有一些代码可用于读取文件并将其转换为图像而不锁定文件。 How to convert image in byte array

具体请看我写的末尾的那一点:

Bitmap newBitmap = GetImageFromByteArray(File.ReadAllBytes(fileName));