2017-05-04 3 views
0

나는 데이터베이스를 업데이트 서버를 호출하는 기능을 가지고 있고 나는 결과를 반환하기 전에 완료 될 때까지 기다릴 : 내가하고 싶은 무엇/C# 안드로이드 기다려

public async Task<int> CarryOutPreRegisterDevice(string emailAddress) 
{ 
    int intRet=-1; 
    Task<int> tski = PreRegisterDevice(emailAddress); 

    intRet = await tski; 
    return intRet; 
} 

이 상황이 진행되는 동안 진행 표시를 표시합니다. 그러나 진행 대화 상자에서 기다리는 줄을 감싸 자마자 기다려온 작업이 완료되기 전에 원래 스레드가 실행되어 intRet을 반환 할 수 있습니다.

public async Task<int> CarryOutPreRegisterDevice(string emailAddress) 
{ 
    int intRet = -1; 
    Task<int> tski = PreRegisterDevice(emailAddress); 

    ProgressDialog progressDialog; 
    progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true); 
    progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner); 
    new Thread(new ThreadStart(async delegate 
    { 

     intRet = await tski; 

     progressDialog.Dismiss(); 
    })).Start(); 

    return intRet; 
} 

작업을 완료하기 전에 반환 선이 실행되지 않도록하기 위해 구조화하는 더 좋은 방법이 있습니까?

감사합니다.

+1

새 스레드를 만드는 이유는 무엇입니까? 그것은 작업의 목적을 무효로 만듭니다. 진행 대화 상자를 보여 주면 바로 그 작업을 기다리고 있습니다. 당신이해야 할 일은 모두 ... – Gusman

답변

1

왜 스레드를 만들었는지 모르겠지만 그 이유는 작업의 목적을 상쇄합니다. 긴 작업이 진행되는 동안 회 전자를 표시하려면 진행률 대화 상자를 표시 한 후 기다려야합니다.

public async Task<int> CarryOutPreRegisterDevice(string emailAddress) 
{ 
    ProgressDialog progressDialog; 
    progressDialog = ProgressDialog.Show(AppGlobals.CurrentActivity, "", "Sending....", true); 
    progressDialog.SetProgressStyle(ProgressDialogStyle.Spinner); 

    var intRet = await PreRegisterDevice(emailAddress); 

    progressDialog.Dismiss(); 

    return intRet; 
} 
+0

예. 지금 명백하게 :-) 고마워. – MHugh

+0

도움이 되었다면 대답을 수락하십시오 : – Gusman

+0

예, 그랬고 지금은 있습니다 :-) – MHugh