开发者

How To Pass refrence and Get Return in Thread?

I Working on desktop application where i am get struck. I have a method through I am doing HTTP Post And Get. I am managing this object through ref in entire application. This object fetching category from website and i am using same ref for posting as well.

This category Fetcher method return dat开发者_运维技巧atable of categories. This Method hang my UI, So i need to implement this in thread.

But i don't know how to pass ref in thread and get return values.

This is How I am passing values.

Categorydt = objPostDataFetcher.FetchCategories(ref httpHelper);

I want to call this method in Thread. Please give me any idea and suggestion. Thanks in Advance.


I think this should solve the problem of passing ref.

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

in your case, it looks to be

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

And if you want to use method with return type in thread, you can use this link how to call the method in thread with aruguments and return some value

Good Luck :)


The simplest approach would be to use an asynchronous delegate, as this will give you parameter passing and return values. However, it is worth bearing in mind that this will run on a thread-pool thread and may not be suitable if your calls are very long-running. Anyway, start with delegates and see how it performs. There is a good tutorial here:

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


If don't want your method to hang user interface you should use BackgroundWorker class. Look at http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx.

Best regards.


Here's how to invoke a worker method on its own thread that invokes a callback to pass data back to the main thread:

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);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜