2009-09-21 44 views
2

我有一个线程可以侦听到我的WPF应用程序的命令。如果WPF应用程序获取了屏幕截图的命令,则该任务将被移交给“screenshotService”。我发现索姆代码采取截图某处interweb,似乎工作,但我还没有想通了....我不能把这张截图来自另一个线程,给这个例外:WPF从主线程以外的其他线程获取屏幕截图

{"This API was accessed with arguments from the wrong context."} 

好说的了是我的屏幕截图方法的签名从UI中取得了一个UIElement,这个网格总是一样的,并且被绑定到了takeScreenshot方法的构造函数。

我该如何去做这个截图?

+0

你确定这是一个的失败的截图代码?是否有可能从非UI线程更新WPF UI,并引发异常? – Andy 2009-09-22 02:53:22

回答

1

使用调度或一个BackgroundWorker来完成这项工作:

ThreadStart start = delegate() 
{ 
    Dispatcher.Invoke(DispatcherPriority.Normal, 
       new Action<string>(TakeScreenshot), 
       "From Other Thread"); 
}; 

new Thread(start).Start(); 







BackgroundWorker _backgroundWorker = new BackgroundWorker(); 

_backgroundWorker.DoWork += _backgroundWorker_TakeScreenshot; 


_backgroundWorker.RunWorkerAsync(5000); 

void _backgroundWorker_TakeScreenshot(object sender, DoWorkEventArgs e) 
{ 
} 
+0

这是不是只是将工作传回主UI线程? – Matt 2009-09-22 01:58:47

+1

是的,它的确如此,这就是它应该做的,UI只能从UI线程更新。 – luvieere 2009-09-22 08:07:23

+0

谢谢。那么我在哪里调用这个,我收到与线程的命令,我想上面的代码应该从主线程执行?那么,我必须将调度程序代码移到我的用户界面吗?那么我如何从我的命令线程获取屏幕截图? – H4mm3rHead 2009-09-22 17:29:05

相关问题