c#后台工人类

时间:2011-02-08 09:36:11

标签: c# multithreading backgroundworker

我想将此方法放入后台工作者类,我正在尝试但卡住了, 任何人都可以帮助我如何将此方法运行到后台工作者类中:
我将此方法调用到我的asp.net页面,其中文件在服务器上压缩,然后返回到客户端。但压缩文件可能需要更长时间,用户将看到一个忙碌的屏幕,所以为了避免我想使用后台工作者类:

[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;
}

1 个答案:

答案 0 :(得分:3)

似乎您的问题是从BackgroundWorker返回值。这可以这样做:

在worker的DoWork方法中,将e.Result设置为您想要返回的内容:

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

然后,在RunWorkerCompleted方法中,您可以在主线程中访问此值:

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

我假设File在这里是字符串,但您可以将其强制转换为您所需的对象。

为什么你需要在Web应用程序中使用它我不知道,但这至少是如何做到的;)