如何传递引用并获取线程返回?

时间:2010-10-21 14:27:43

标签: c# multithreading

我在桌面应用程序上工作,我很震惊。 我有一个方法,我正在做HTTP Post和Get。我通过ref在整个应用程序中管理这个对象。 此对象从网站获取类别,我也使用相同的参考作为发布。

此类别Fetcher方法返回类别的数据表。这个方法挂起了我的UI,所以我需要在线程中实现它。

但我不知道如何在线程中传递ref并获取返回值。

这就是我如何传递价值观。

Categorydt = objPostDataFetcher.FetchCategories(ref httpHelper);

我想在Thread中调用此方法。请给我任何想法和建议。 提前致谢。

4 个答案:

答案 0 :(得分:8)

我认为这应该可以解决传递ref的问题。

new Thread(() => { YourMethod(ref httpHelper);

在你的情况下,它看起来是

new Thread(() => { objPostDataFetcher.FetchCategories(ref httpHelper);

如果你想在线程中使用带返回类型的方法,你可以使用这个链接 how to call the method in thread with aruguments and return some value

祝你好运:)

答案 1 :(得分:1)

最简单的方法是使用异步委托,因为这将为您提供参数传递和返回值。但是,值得注意的是,这将在线程池线程上运行,如果您的调用非常长,可能不适用。无论如何,从代表开始,看看它是如何表现的。这里有一个很好的教程:

http://msdn.microsoft.com/en-us/library/h80ttd5f.aspx

答案 2 :(得分:0)

如果不希望您的方法挂起用户界面,则应使用BackgroundWorker类。请看http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

最好的问候。

答案 3 :(得分:0)

以下是如何在其自己的线程上调用worker方法,该线程调用回调以将数据传递回主线程:

class Program
{
    public static volatile bool done = false;
    static void Main(string[] args)
    {
        WorkerClass worker = new WorkerClass();
        worker.Callback = new WorkerCallbackDelegate(WorkerCallback);
        System.Threading.Thread thread = new System.Threading.Thread(worker.DoWork);
        thread.Start();

        while (!done)
        {
            System.Threading.Thread.Sleep(100);
        }
        Console.WriteLine("Done");
        Console.ReadLine();
    }

    public static void WorkerCallback(object dataArg)
    {
        // handle dataArg
        done = true;
    }
}

public delegate void WorkerCallbackDelegate(object dataArg);
class WorkerClass
{
    public WorkerCallbackDelegate Callback { get; set; }
    public void DoWork()
    {
        // do your work and load up an object with your data
        object data = new object();
        Callback(data);
    }
}