2009-09-21 3 views
2

내 WPF 응용 프로그램에 명령을 수신하는 스레드가 있습니다. WPF 응용 프로그램에서 스크린 샷을 가져 오는 명령을 받으면 작업이 "screenshotService"로 넘겨집니다. 내가 interweb에 어딘가에 화면을 캡처하는 솜 코드를 발견, 작동하는 것 같다,하지만 난 그것을 통해 생각 havent 한 .... 나는이 예외주고, 다른 스레드에서이 화면을 캡처 할 수 없습니다 말을WPF 메인 스레드 이외의 스레드에서 스크린 샷 찍기

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

왼쪽 내 스크린 샷 메서드의 시그니처가 UI에서 UIElement를 가져오고,이 그리드는 항상 동일하며 takeScreenshot 메서드의 생성자에 종속됩니다.

어떻게하면이 스크린 샷을 찍을 수 있습니까? 당신이 실패하는 것 스크린 샷 코드의 확인

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

위치 : – Andy

답변

1

일을 할 수있는 디스패처 또는 BackgroundWorker에 사용? UI가 아닌 스레드에서 WPF UI를 업데이트 할 가능성이 있으며 예외가 발생하고 있습니까?
+0

이 작업을 기본 UI 스레드로 다시 전달하지 않습니까? – Matt

+1

예, 그렇습니다. UI가 UI 스레드에서만 업데이트 할 수 있습니다. – luvieere

+0

감사합니다. 그래서 어디서이 코드를 호출 할 것인가? 스레드로 명령을 받는다. 위의 코드는 주 스레드에서 실행되어야한다. 그래서 dispatcher 코드를 UI로 옮겨야합니까? 그런 다음 어떻게 명령 줄에서 스크린 샷을 가져 옵니까? – H4mm3rHead

관련 문제