UI 스레드에서 호출해야하는 UI 메서드가 있습니다.EndInvoke가 아무것도 검색하지 않습니다.
Dim currProjForm As Form_Project_Contaner = HomeForm.GetActiveProject()
Dim asyncOpDlg As [Delegate] = New OpenDocForReportDelegate(AddressOf currProjForm.OpenDocForReport)
currProjForm.BeginInvoke(asyncOpDlg, documentId, revisionId, exportProvider)
하는 메소드가 예외를 던질 수있는, 그래서 Try...Catch
블록의 코드를 포장하고 예외를 반환하기로 결정
그러므로 나는 다른 스레드에서, 그것을 소유하는 폼 컨트롤에 BeginInvoke
통해 전화 오브젝트 나는 EndInvoke
으로 검색 할 수 있도록 :
Public Function OpenDocForReport(ByVal documentId As Int32,
ByVal revisionId As Int32,
ByVal exportProvider As IExportProvider) As Exception
Try
'...statements...
Catch ex As Exception
Return ex
End Try
Return Nothing
End Function
및
Dim asyncOpToken As IAsyncResult = currProjForm.BeginInvoke(asyncOpDlg, documentId, revisionId, exportProvider)
Dim asyncOpRet = currProjForm.EndInvoke(asyncOpToken)
UI 메서드에서 예외가 발생하여 디버거에서 올바르게 반환 된 경우에도 실제로 Nothing
(null
)이 표시됩니다.
어떤 도움이 필요합니까? (VB 또는 C#에 대해 신경 쓰지 않아도됩니다.)
OpenDocForReportDelegate에 대한 선언문을 표시하십시오. –
'BeginInvoke'와'EndInvoke' 호출이 서로 뒤로 돌아가고 있습니까? 왜'Invoke'를 사용하지 않을까요? –
@JonSkeet이 정답입니다! 대리인은 이전 버전이었고 (작성된 후에 메서드가 수정되었습니다) 예외를 반환하지 않았습니다! – Teejay