2013-06-14 2 views
0

일부 장기 실행 프로세스를 수행하고 RichTextBox에 표시 할 단락을 작성하려면 Thread을 만듭니다.메인 스레드의 하위 스레드에서 FlowDocument에 단락 만들기

일반적으로이 간단하여 수행됩니다 :

Paragraph paragraph = new Paragraph(); 
paragraph.Inlines.Add(new TextBlock() 
{ 
    Text = "Hello i´m som text", 
     TextWrapping = TextWrapping.NoWrap 
}); 
richtextbox.Document = new FlowDocument(paragraph); 

(작품 파인)하지만 단락 스레드에서 만든 다음에 추가 할 RichTextBox 같은 :

Thread t = new Thread(new ThreadStart(CreateText)); 
t.Start(); 

private void CreateText() 
{ 
    Paragraph paragraph = new Paragraph(); 
    paragraph.Inlines.Add(new TextBlock() 
    { 
     Text = "Hello i´m som text", 
      TextWrapping = TextWrapping.NoWrap 
    }); 
    Main.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => 
    { 
     richtextbox.Document = new FlowDocument(paragraph); 
    } 
} 

내 문제는 이것이 오류를 반환한다는 것입니다. 오류 :

The calling thread cannot access this object because a different thread owns it. on richtextbox.Document = new FlowDocument(paragraph);

+0

http://stackoverflow.com/questions/2728896/the-calling-thread-cannot-access-this-object-because-a-different-thread-owns-it/2729040#2729040 – Terry

+0

죄송 합니다만 볼 수는 없습니다. 연결 .... – Lynspitti

+0

오류 선은 매우 분명합니다. 현재 UI 스레드가 아닌 스레드를 통해 UI 요소의 내용을 변경하려고합니다. 따라서 액세스 권한이있는 스레드를 가져와야 컨트롤을 업데이트 할 수 있습니다. – Terry

답변

0

비슷한 질문에 대한 답변으로 이미이 문제에 대한 해결책을 공유했습니다. SO answermy blog post을 참조하십시오. 필요에 따라 성능 및 UI 차단이 부족합니다. 2013 년 이후로 문제를 해결할 다른 방법을 찾은 경우 공유 할 수 있습니까?

관련 문제