문제

다.

"무슨 악한 일에서의 깊이 WPF 내가 일으키게?"

내가 만드는 캔버스 백그라운드 스레드에서 연출하는 비트맵.이 작업에서 생산 코드를 문제없이 문제입니다.나는 다음과 같다:

  • 을 만들 Canvas 객체
  • 새로 만드 네임스페이스 객체
  • 에 할당하는 네임스페이스 캔버스
  • 그릴에 내가 원하는 캔버스
  • 전화 캔버스입니다.측정()캔버스와의 크기
  • 전화 캔버스입니다.Arrage()을 캔버스로 사용할 수 있 rect
  • 전화 캔버스입니다.UpdateLayout()
  • 렌더 캔버스

에 그리는 단계,나는 항상 그냥라고 합니다.아이들이다.Add()을 넣어 UIElements 캔버스에.이것은 항상했다.

지금 어떤 이유 중 하나에,특정한 경우 응용 프로그램에서 작업 통화를 제공합니다.아이들이다.Add()중단 indefinetely 차 백그라운드 스레드.나는 아무것도 생각할 수 없다 나는 다르게 사된 코드 작업에 대한 올이나 특정한 경우입니다.

할 수 있는 사람이 제안 가능한 이유를 호출하는 캔버스입니다.아이들이다.추가()에 걸요?

편집:백그라운드 스레드가 STA 스레드(백그라운드 처리 모델이었다에 넣을 곳이 없었기 때문에 나는 프로세스를 사용하여 이미지를 WPF 에 MTA thread),그래서 스레드 아파트의 모델을 수 없다.

편집#2:는 동안 나는 사람들이 왜는 제안도 Dispatcher.BeginInvoke()내에서 백그라운드 스레드,내가 좋아하지 않는 옵션을 두 가지 이유:

  1. 나는 내 백그라운드 처리를 동시에는 스레드가 있습니다.내 백그라운드 스레드가 있는 큐 다른 스레드가 제출한 이미지 작업,그리고 나의 백그라운드 스레드 프로세스는 각 작업에 그것이 가져옵니다.를 사용하여 발송자.BeginInvoke()복잡성의 또 다른 레이어를 추가하는 나라입니다.
  2. 나는 결코 하는 데 필요한 지금까지.이 일을 배경 처리에서 동시에 나는 백그라운드 스레드에는 그냥 일반 .나가려고 결정될 수 있습에 대한 다른 한 사용자는 원인 이 코드를 작동하지 않습니다.에 가입할 수 없을 경우에는 그 작업,나는 끝까지 다시 쓰기 이 처리하지 않고 코드 WPF 는데 또한 아이 방지합니다.
도움이 되었습니까?

해결책

어떤 아파트의 모델링을 사용하여 당신의 배경에 대한 실?

믿 WPF 에서 실행하는 데 필요한 STA thread.할 때 부활 백그라운드 스레드,설정을 시도 그것은 아파트를 STA.

업데이트:

는 경우 STA 스레드가 아닌 문제,그리도록 노력하겠다 깨 canvas 그리기 덩어리로.기본적으로 할 경우:

Dispatcher.BeginInvoke(...)

에서 스레드 제공되는 대리자가에 dispatcher 큐 수 있도록 다른 대기 중인 작업을 실행합니다.

Update2:

해 볼 수도 있습으로 디버깅의 소스 코드는 Canvas 객체에 사용.NET framework reference sources.당신이 사용할 수 있습니다"을 설정하여 활성화입니다.net framework 소스 스테핑"에서 디버깅 옵션에서 도구->옵션이 있습니다.

다른 팁

보 Dispatcher.Run()배경에서 스레드가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top