2012-04-10 6 views
0

나는 다음과 같이 작동 장기 실행 작업을위한 작업 개체가 :BackgroundWorker.OnDoWork가 호출되지 않는 이유는 무엇입니까?

Class LongRunningJob 
    Inherits BackgroundWorker 

    Protected Overrides Sub OnDoWork(ByVal e As System.ComponentModel.DoWorkEventArgs) 
     'do long running job here 
    End Sub 
End Class 

을 그리고 난과 같이이 호출 :

Dim job As New LongRunningJob 

    'run it 
    job.RunWorkerAsync() 

이 년 전에 잘 작동, 나는 다른로 이동 소지품. 오늘이 코드로 돌아 가야했는데, 지금 실행하면 OnDoWork 무시가 단순히 호출되지 않습니다. 거기에있는 중단 점은 적중되지 않으며, 디버깅 메시지는 작성되지 않으며, 메소드는 단순히 호출되지 않으며 아무런 오류도 발생하지 않습니다.

낮은 수준의 프레임 워크와 비슷한 것으로 보아 무엇이 바뀌 었는지 생각할 수 없습니다. 나머지 응용 프로그램은로드되어 정상적으로 실행되고 기본 창에 WPF 앱이 표시되고 버튼 클릭 이벤트가 실행됩니다. 그것은 단지 발생하지 않는 백그라운드 스레드 메소드 일뿐입니다. 여기서 무슨 일이있을 수 있니?

+0

실제 코드를 모두 보지 않고 대답하기가 어렵습니다. –

+0

BTW, 소스 코드 개정 관리 시스템을 사용합니까? –

+0

@MitchWheat : 큰 프로젝트이기 때문에 그것을 보면서 대답하기가 어려울 것입니다. 나는 문제를 격리시키기 위해 무엇을 잘라 낼 수 있을지 확신하지 못한다. 그리고 모든 것이 사람들에게 볼 것을 부탁하기에는 너무 어려울 것이다. Re : 소스 코드, 네, 마지막 작업 코드로 되돌아 갈 수는 있겠지만 정말로 전혀 건드리지는 않았으니 문제는 환경이라고 생각합니다. –

답변

0

글쎄, 나는이 문제를 해결하는 방법을 알아 냈다. 실제로 무엇이 실제로 일어나고 있는지 잘 모르겠다. 나는 빈 OnDoWork 루틴을 왼쪽 경우

Protected Overrides Sub OnDoWork(ByVal e As System.ComponentModel.DoWorkEventArgs) 
    'no code at all 
End Sub 

은 호출 할 것이고, 내가 거기에 기본 프레임 워크 물건을 넣을 경우, 그것은 또한 호출 할 것이다. 그러나 다음과 같은 행을 추가하자마자 :

Dim result = AnotherLibrary.SomeMethod() 

루틴은 호출되지 않습니다. 나는 Compile Tab, Target CPU 드롭 다운을보고 x86이라고 말한 것을 보았습니다. AnotherLibrary 프로젝트도 보았습니다. Any CPU으로 변경하고 문제가 해결되었습니다. 그러나 나는 아직도 그 의미가 무엇인지, 왜 그것이이 문제를 일으켰는지 알고 싶습니다.

2

BackgroundWorker를 사용할 때 자주 발생하는 실수입니다. 의심 할 여지없이 예외를 확인하는 것을 잊고 있습니다. 코드를 명시 적으로 작성하지 않으면 진단없이 삼켜집니다. 수정 :

Protected Overrides Sub OnRunWorkerCompleted(ByVal e As RunWorkerCompletedEventArgs) 
    If e.Error IsNot Nothing Then Throw e.Error 
    MyBase.OnRunWorkerCompleted(e) 
End Sub 
+0

코드가 전혀 실행되지 않기 때문에 예외가 없습니다. 나는 breakpoints를 넣고, 디버깅 문장을 넣는다. 코드는 단순히 호출되지 않는다. 하지만 그것은 CPU 목표와 관련된 문제였던 것으로 보인다 (내 대답 참조). 무슨 일이 벌어지고 있는지 알 겠어? –

+0

CPU 타겟을 잘못하면 예외를 생성하는 좋은 방법입니다. 출력 창에서 디버거의 "첫 번째 예외 예외"알림을 찾습니다. –

0

비슷한 문제에 대한 답변을 얻었습니다. 내 프로젝트 (C# -wpf stuff), 관리 객체가있는 C++ 코드의 래퍼에 일부 DLL을 추가하려고 시도 할 때 두 번째를 사용할 때 같은 문제가 발생합니다.

동일한 라이브러리 (버전 XX.4.1 및 XX.3.2) 인 경우 두 라이브러리가 서로 다른 인스턴스를 사용했기 때문에 제 경우에는 두 인스턴스가 사용되었습니다. 같은 라이브러리에서 두 라이브러리를 모두 컴파일하면 모든 것이 잘 수행됩니다.

관련 문제