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