응용 프로그램이 멈추는 데 문제가 있습니다. 내 시나리오를 설명하겠습니다. 데이터베이스에 대한 비동기 호출을 수행하여 항목 목록을 가져 오는 서비스가 있습니다. 작업에 의해 실행됩니다. 이 작업 안에 try catch 블록이 있으므로 다음과 같이 보입니다.
public Task<List<T>> ComboListAsync(int? id = null, EnumDTO dto = EnumDTO.Default)
{
return Task.Run(() =>
{
using (var context = new ContextService())
{
try
{
return GetComboList(id, dto, context);
}
catch (Exception e)
{
Handler.DatabaseConnectionException();
throw;
}
}
});
}
그런 다음 GetComboList로 예외를 throw합니다. (현재로서는)
protected virtual List<T> GetComboList(int? id, EnumDTO dto, ContextService context)
{
throw new NotImplementedException();
}
따라서 호출은 예외를 포착하고 여기로 들어갑니다.
public void Show(string message)
{
Message = message;
Application.Current.Dispatcher.Invoke(() =>
{
dialogView = new DialogView() {DataContext = this, Owner = Application.Current.MainWindow};
dialogView.ShowDialog();
});
}
이제 Dispatcher가 앱을 중지하고 begin invoke를 사용하도록 변경하려고 시도했지만 동일한 작업을 수행합니다. 디스패처가 없으면 호출 스레드가 STA가 아니라는 오류 메시지가 표시됩니다. 데이터베이스에 연결하는 데 문제가 있다는 메시지를 대화 창에 표시하고 싶습니다. 누구든지 도울 수 있습니까? 나는 온라인을 보았고 발송자에 대한 많은 스레드가 있지만 실제로 내 문제를 해결할 해결책을 보여주는 것은 없습니다.
감사합니다
ComboListAsync를 호출하는 코드 편집
protected override void RetrieveRelatedActiveLists()
{
MyCollection = service.ComboListAsync().Result;
}
호출 코드로 인해 교착 상태가 .Result
.
를 사용 service.ComboListAsync().Result
하면이 메서드가 반환 될 때 Application.Current.Dispatcher.Invoke
까지 UI 스레드가 대기하고, 그 안에서 호출 하면 메서드 자체의 반환을 기다리는 UI 스레드에 메시지를 보냅니다.
다음 과 같은 방법을 기다려야 합니다 service.ComboListAsync()
.
protected override async void RetrieveRelatedActiveLists()
{
MyCollection = await service.ComboListAsync();
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다