여기에 문제가 있습니다. Add-in Express로 만든 Outlook 추가 기능이 있습니다. WPF 콘텐트가 실행되는 유일한 winforms ElementHost가있는 패널을 호스팅합니다. 이 WPF 컨트롤에는 텍스트 상자와 단추가 있습니다. 버튼 클릭 트리거 'RunWorkerCompleted'프로세스에서 데이터를로드하는 백그라운드 워커가이 데이터를 제어합니다. 버튼을 누르면 모든 것이 정상적으로 진행됩니다. 그러나 TextBox에서 'Enter'키를 누른 다음 BackgroundWorker를 트리거하면 'RunWorkerCompleted'가 주 스레드가 아닌 스레드 풀에서 실행되고 WPF 요소에 액세스 할 수 있습니다. 두 경우 모두 BackGroundWorker.RunWorkerAsync()가 주 스레드에서 호출되고 DoWork는 스레드 풀에서 실행되며 enter-key-catch의 경우에만 RunWorkerCompleted도 스레드 풀에서 실행됩니다.Add-in express 및 BackGroundWorker 스레딩
0
A
답변
0
Add-in Express에서 버그가 발생했습니다. 경우에 따라 System.Threading.SynchronizationContext.Current
이 null
으로 설정된 Add-in Express 이벤트 처리기가 호출됩니다. BackgroundWorker
RunWorkerAsync
메서드를 사용하여 UI 컨텍스트를 저장하면 문제가됩니다.
SynchronizationContext를 수정하려면 다음 해결 방법을 사용할 수 있습니다. 여기서 MyAction
은 RunWorkerAsync
을 호출하는 방법입니다.
var ctx = SynchronizationContext.Current;
if (ctx != null)
{
MyAction();
}
else
{
var timer = new DispatcherTimer();
timer.Tick += (s, a) =>
{
MyAction();
timer.Stop();
timer = null;
};
timer.Interval = TimeSpan.FromMilliseconds(10);
timer.Start();
}
또 다른 해결책은 정적 멤버 어딘가에 유효한 SynchronizationContext.Current
값을 저장 한 후 같은 목적을 위해 이벤트 처리기에서 SynchronizationContext.Post
를 호출 할 것이다. 나는 이것을 시도하지 않았다.
관련 문제
- 1. wpf 스레딩, backgroundworker, 디스패처
- 2. C# Express 2010 멀티 스레딩
- 3. BackgroundWorker - C#
- 4. Excel Addin 및 ASP.net
- 5. BackgroundWorker 및 CollectionViewSource
- 6. 가장 및 BackgroundWorker
- 7. BackgroundWorker 및 foreach 루프
- 8. BackgroundWorker 및 ClipBoard
- 9. BackgroundWorker 및 ConcurrentQueue
- 10. BackgroundWorker 및 Dispatcher.BeginInvoke (WPF)
- 11. BackgroundWorker 및 Progressbar.Show()
- 12. BackgroundWorker 및 공유 클래스
- 13. Timer Object 및 BackgroundWorker
- 14. documentviewer 및 backgroundworker
- 15. WebBrowser 및 BackgroundWorker VB
- 16. Outlook addin addin 제거 해제
- 17. backgroundWorker
- 18. AddIn Express Excel Addin에 Wix Toolset과 함께 NGen 사용
- 19. PDF IFilter V6 Backgroundworker 스레딩 문제 - VSHost를 제거합니까?
- 20. BackgroundWorker 및 statusstrip 업데이트와의 CrossThreading 문제
- 21. WPF 및 멀티 스레딩 질문
- 22. Tkinter 스레딩 및 캔버스로 스레딩
- 23. 클로저 및 BackgroundWorker 이벤트 처리기
- 24. BackgroundWorker 스레드 및 타이머 논리
- 25. UI의 BackgroundWorker 및 업데이트 컨트롤
- 26. BackgroundWorker 및 대용량 파일 삭제
- 27. C# Winform ProgressBar 및 BackgroundWorker
- 28. C# threads 및 backgroundworker 문제
- 29. BackgroundWorker 및 리소스 관리 C#
- 30. BackgroundWorker 재사용, 취소 및 기다림
감사합니다. WPFElement.Invoke (() => {ui-related-code})' – user3270297