2013-09-30 4 views
0

웹 사이트에서 데이터를 검색하여 그리드를 채우는 내 기본 폼에 비동기 메서드가 있습니다.다른 클래스에서 비동기 메서드 호출

다른 클래스를 만들고 그 함수를 호출했습니다. 디버깅 할 때 함수를 입력하고 웹 사이트에서 데이터를 읽고 그리드를 채우지 만 현실 그리드는 비어 있습니다.

코드 예입니다. 제발 도와주세요!

Class MainForm 
{ 

public async PopulateGrid() 

    //goto website 
    //get data 
    //updategrid 

} 

Class newProject 
{ 

    MainForm mf = new Mainform; 
    mf.PopulateGrid(); 

} 
+0

어디 그리드를 업데이트하는 코드? 비동기 멤버 메서드를 호출하는 것과 다른 클래스의 async 메서드를 호출하는 것 사이에는 전혀 차이가 없습니다. 또한, 양식을 표시합니까 (예 : mf.Show()?) –

+0

BTW, 어떤 UI 기술을 사용하고 있습니까? WinForms, WPF? –

답변

0

여기서 추측해야합니다. 전체 메서드 서명과 실제로 눈금을 업데이트하는 코드를 제공해야합니다. 또한 양식을 언제 어떻게 표시합니까?

하나의 추측은 구조체의 데이터가 아직 PopulateGrid로 채워지지 않은 채 그리드를 표시한다는 것입니다. PopulateGrid는 데이터를받은 후 그리드 자체를 강제로 업데이트해야합니다. 그렇지 않으면 그리드는 새로운 데이터가 있는지 결코 알 수 없습니다.

1

먼저 조언 단어 결코 이벤트 처리기가 아닌 메서드를 작성하십시오. async void 메서드를 사용하여 예외를 숨 깁니다. 또한 비동기 메소드에 항상 Async 접미어를 추가하십시오.

public async Task PopulateGridAsync() {...} 

당신은 모든 비동기 호출을 기다리고 있습니다, 그래서 당신이 쓰는 있는지 확인해야합니다 : 여기에 제안 된 새로운 정의입니다 당신은 몇 가지 예외를 가지고

await mf.PopulateGridAsync(); 

대부분의 경우가 있지만 무효로 인해 숨겨진 리턴 유형.

상세 정보 :

관련 문제