2016-08-16 5 views
0

저는 C# (.aspx)을 사용하고 있습니다.ScriptManager.RegisterClientScriptBlock이 작업에서 작동하지 않습니다.

나는 다음과 같은의 OnClick 콜백 버튼이 있습니다

protected void btnReplay_Click(object sender, EventArgs e) 
{ 
    //Code thats take 30secs to run 
    ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "script", "ShowMessage('Done');", true); 
    }); 
} 

: ShowMessage 함수가 호출되지 않은이 경우에서

protected void btnReplay_Click(object sender, EventArgs e) 
{ 
    Task.Factory.StartNew(() => 
    { 
     //Code thats take 30secs to run 
     ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "script", "ShowMessage('Done');", true); 
    }); 
} 

, 그러나 나는 다음과 같이 코드를 변경 해요 경우 함수 ShowMessage이 호출됩니다.
왜 그런 일이 일어나고 어떻게 해결할 수 있습니까? 또는 내 코드를 실행하는 다른 방법을 제안 할 수 있습니까? 작업을 실행

덕분에

+0

Task.Run()을 시도한 적이 있습니까? – Raskayu

+0

내 대답으로 문제가 해결 되었습니까? 그렇다면 솔루션으로 표시하는 것을 고려하십시오. – bsoulier

답변

0

당신의 작업 완료를 기다리는 당신의 btnReplay_Click 방법을하지 않습니다.

여기에 작업이 완료되지 않았 음을 의미합니다. BEFORE 메서드가 반환됩니다 (따라서 ScriptManager는 이미 렌더링 된 페이지에 액세스 할 수 없습니다).

그래서 코드의 두 번째 버전 (더 이상 작업하지 않음)에서 작동합니다.

대신 장기 실행 코드 asynchonously을 랩핑하거나 클라이언트 측에서 유효성 검사를 위해 메소드 끝이 중요하지 않은 경우 in background으로 실행해야합니다.

관련 문제