【发布时间】:2019-04-30 22:25:27
【问题描述】:
当某个条件在某个时间点为真时,我正在尝试从我的应用程序中捕获屏幕截图并将其设置为picturebox.Image。这种情况必须反复检查。
为了检查这种情况,我使用了System.Timers.Timer。但是Clipboard.GetImage() 不起作用。
我已经尝试了以下代码,但它不起作用。
timer = new System.Timers.Timer();
timer.Interval = 10000; //I'm checking the condition every 10 second or so
timer.Elapsed += OnTimedEvent;
timer.AutoReset = true;
timer.Enabled = true;
void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
{
if(myCondition==true)
GetScreenshot();
}
void GetScreenshot()
{
try
{
SendKeys.SendWait("{PRTSC}");
Thread.Sleep(500);
var image = Clipboard.GetImage();
pictureBox1.Image = image;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
}
这不起作用,如果我尝试保存图像,则会出现Object reference not set 类异常。
我在某处读到它是由于计时器为 MTA 而发生的,因此它无法访问剪贴板。我曾尝试使用System.Windows.Forms.Timer,但由于我猜是持续检查,这会减慢程序速度。
有什么简单的方法可以让它在不降低性能的情况下工作。 我对 C# 很陌生,所以对某个解决方案的工作原理进行一些描述会很有帮助。
【问题讨论】:
-
您是否尝试在代码中截取屏幕截图而不是在某处发送密钥?
-
虽然您所做的听起来没有错,但使用以下代码可以很好地实现类似的结果:code.msdn.microsoft.com/windowsdesktop/…
-
听起来
myCondition == true时只需要截图。您是否考虑过将myCondition设为属性,然后从那里调用GetScreenshot()(在setter 中,并且仅在value == true时)?
标签: c#