2011-02-08 6 views
2

나는 배경 작업자 클래스에이 방법을 데려 가고 싶다는, 내가 노력하지만 붙어 있어요 어느 한 배경 작업자 클래스에이 방법을 실행하는 방법을 나에게 도움이 될 수 있습니다 .net 페이지. 파일은 서버에서 압축 된 다음 클라이언트에 returend됩니다. 그러나 파일의 압축하는 것은 그래서 난 백그라운드 작업자 클래스를 사용하고자하는 것을 방지하기 위해, 더 오래 걸릴 수 있으며, 사용자는 통화 중 화면이 나타납니다 :C# 배경 작업자 클래스

[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)] 
public string Zip(string f, bool original) 
{ 
    string zip = ""; 
    try 
    { 
     files = HttpContext.Current.Server.UrlDecode(files); 
     string[] fileCollection = files.Split('*'); 
     zipFile = class1.zipfile(fileCollection, IsOriginal); 

     int fileLength = files.Length; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Exception during processing {0}", ex); 
    } 
    return File; 
} 
+2

무엇을 시도 했습니까? 얼마나 남았습니까? [MSDN에는 예제가 있습니다.] (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx)'BackgroundWorker'를 사용하는 것입니다. 그들의 것. 또한 배경 작업자는 * 더 일반적으로 * UI를 차단하지 않기 위해 사용됩니다. 콘솔에서 사용할 수는 있지만 덜 일반적입니다. 많은면에서, 나는 여기에'ThreadPool'을 사용할 것입니다 ... –

+0

당신의 방법은별로 의미가 없습니다. 첫째로,'zip'은 결코 사용되지 않습니다. 그리고 당신은 어디에도 존재하지 않는'File'을 반환하고 있습니다. –

+0

@ marc Gravell : 메소드에 인수를 전달하는 방법에 혼란스럽고이 메소드가 값을 반환하므로 – safi

답변

3

그것은 당신의 문제가있는 BackgroundWorker에서 값을 반환하는 것 같다. 즉 다음과 같이 수행 할 수 있습니다

private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    ... 
    e.Result = File; 
} 

다음, RunWorkerCompleted 방법으로, 메인 스레드에서이 값에 액세스 할 수 있습니다 작업자의 DoWork 방법에

설정 반환 할 무엇에 e.Result :

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    string result = e.Result as string; 
} 

나는 File 문자열이 여기에 가정,하지만 당신은 당신의 요구 객체에 캐스팅 할 수 있습니다.

웹 응용 프로그램에서 필요한 이유는 무엇입니까? 단서가 없지만 적어도 어떻게해야합니까?

+0

고마워, 나는이 파일을 서버에서 압축 한 다음 클라이언트에 returend 내 ​​asp.net 페이지로이 메서드를 호출하기 때문에 웹 APP에 필요합니다. 하지만 파일 압축이 예를 들어 500 메가 바이트 및 사용자가 zip 처리가 완료되고 크롬/mozilla가 실행중인 스크립트로 인식 될 때까지 사용중인 페이지가 표시되므로 사용자에게 페이지를 죽이라는 메시지가 표시됩니다. ( – safi

+0

AJAX를 사용하여이 작업을 수행하는 것이 좋지 않습니까? 서버가 작동하는 동안 클라이언트를 응답 상태로 유지하십시오. AJAX의 A는 이유 때문에 비동기입니다. –

+0

@이 메서드에서 이미 ajax를 사용하고 있습니다. [Ajax.AjaxMethod (Ajax.HttpSessionStateRequirement.ReadWrite)] – safi

관련 문제