WPF从主线程以外的其他线程截取屏幕截图

时间:2009-09-21 21:17:43

标签: wpf multithreading

我有一个侦听WPF应用程序命令的线程。如果WPF应用程序获取截取屏幕截图的命令,则任务将移交给“screenshotService”。我发现som代码在interweb的某个地方截取屏幕截图,似乎工作,但我还没想过....我不能从另一个线程中截取这个截图,给出了这个例外:

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

左边说的是我的截图方法的签名从UI获取了一个UIElement,这个网格总是相同的,并且是用于takeScreenshot方法的构造函数。

我如何绕过这个截图?

1 个答案:

答案 0 :(得分:1)

使用Dispatcher或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)
{
}