문제

ASP.NET 및 C#을 사용하고 있으며 Excel로 설정된 매우 큰 결과를 내보내고 있습니다. 내보내기 코드가 실행되는 동안 "로드"애니메이션 GIF를 표시하여 사용자가 요청이 처리되고 있음을 알 수 있습니다. 나는 멀티 스레딩으로 이것을하려고 노력했지만 그다지 익숙하지 않습니다. 누구든지 올바른 방향으로 나를 안내 할 수 있습니까? 감사!

도움이 되었습니까?

해결책

서버에서 멀티 스레딩을하려고합니까? 내가 권장하는 것은 클라이언트 측에서 서버에 게시하기 전에 대기 메시지를 켜는 것입니다. 그런 다음 완료된 게시시 클라이언트 측에서 메시지를 끄십시오.

실제 설정에 대해 더 많이 알지 못하고 더 이상 도움을 줄 수는 없지만 지난번 에이 구현을 구현했을 때는 다음과 같은 일을했습니다.

jQuery를 사용하여 printloadingpanel이라는 div가 있다고 가정합니다. 나는 div를 표시하고 창문을 인계하도록 설정했습니다.

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

그런 다음 1/2 초 간격으로 타이머를 시작하여 인쇄가 완료되었는지 확인하기 시작합니다. 작은 PDF 만 생성하고 다운로드하여 더 빠른 응답이 필요했습니다. 보고서가 실제로 느리면 다음을 조정하고 싶을 수도 있습니다.

    window.setTimeout(checkIfDoneDownload,500);

그런 다음 내 CheckifDoneDownload 함수가 서버에 도달하여 파일 생성을 마치고 다운로드했는지 확인합니다. AJAX 활성화 WCF 서비스를 호출하기 위해 jQuery를 다시 사용하고 있습니다. 이것을 pagemethods 또는 다른 방법으로 서버로 콜백하는 것으로 대체 할 수 있습니다.

function checkIfDoneDownload()
{

$.ajax({
  type: "POST",
  url: "../Services/Utilities.svc/IsPrintDownloadDone",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
  if (msg.d)
  {
    $("#printLoadingPanel").css("display","none");
  }
  else  {window.setTimeout(checkIfDoneDownload,500);}
  },  
  error: function (xhr, textStatus, errorThrown) {
  if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}

이제 서버 측에서 HTTP 핸들러를 통해 다운로드를 생성하고 있습니다. 본질적으로 가장 먼저하는 일은 세션 레벨 플래그를 False로 설정하는 것입니다. 그리고 마지막으로하는 일은 그것을 true로 다시 설정하는 것입니다. 완료된 서비스가 깃발의 값을 반환하는지 확인합니다.

다른 팁

보고서를 생성하는 것과 같은 문제가 발생합니다. 간단한 솔루션은 밤에 보고서를 실행 한 다음 서버에 작성하는 것입니다. 그런 다음 보고서에 대한 링크를 제공하십시오.

asp.net ajax를 사용할 위치에 있다면 UpdateProgress 제어 (와 함께 UpdatePanel).

멋진 애니메이션 GIF 이미지를 받고 있다면 확인하십시오. ajaxload.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top