C#Stream桌面活动

时间:2015-01-03 15:27:42

标签: c# .net

为了简单起见,我决定采用这种方法。启动服务器并单击“开始”按钮,每秒捕获一次桌面并保存图像文件。客户端在启动并单击“查看桌面”按钮时,每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

2 个答案:

答案 0 :(得分:0)

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

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

特别参见我写的最后一位:

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

答案 1 :(得分:-1)

更新图像后,请尝试使用方法PictureBox.Refresh()(从Control继承)。