안녕하세요, 저는 PDF 보고서를 반환하기 위해 다음 코드를 작성했습니다. 이 코드는 멀티 스레딩 샘플 코드를 기반으로합니다. 여러분들은 그것에 대해 약간의 피드백을 주시겠습니까? 저는 다중 스레드에 익숙하지 않습니다. 많은 appriciate! 제프리멀티 스레딩은 값과 반환 값을 허용합니다.
public delegate void StreamResultDelegate(Stream streamResults);
public class GenerateReport
{
private StreamResultDelegate callback;
public GenerateReport(StreamResultDelegate _callback)
{
callback = _callback;
}
public void ThreadProc()
{
if (callback != null)
{
callback(Testing());
}
}
public Stream Testing()
{
var reportsService = new ReportsService();
var nameValueCollection = new NameValueCollection();
byte[] pdfReportContents = reportsService.GetReport("/Rocket.Reports/RocketReport", nameValueCollection);
var stream = new MemoryStream(pdfReportContents);
return stream;
}
}
는
[HandleError]
public class HomeController : Controller
{
private Stream streamTesting = null;
public void StreamResultCallBack(Stream s)
{
streamTesting = s;
}
public FileStreamResult GeneratePdfReport()
{
var g = new GenerateReport(_callback: new StreamResultDelegate(StreamResultCallBack));
var t = new Thread(new ThreadStart(g.ThreadProc));
t.Start();
t.Join();
HttpContext.Response.AddHeader("content-disposition", "attachment; filename=Rockets_List_Printout.pdf");
return new FileStreamResult(streamTesting, "application/pdf");
}}
입니다하지만 그는 단 1 일을하고 있기 때문에 자신의 경우 여전히 쓸모가있을 것입니다. – ZippyV
보고서를 생성하는 동안 그는 적어도 스레드를 차단하지 않을 것입니다.) –
안녕 ZippyV, 당신이 바로 이것에 관한 것입니다.이 요청은 보고서를 생성하는 한 가지 일뿐입니다. – jeffreychi