我在桌面应用程序上工作,我很震惊。 我有一个方法,我正在做HTTP Post和Get。我通过ref在整个应用程序中管理这个对象。 此对象从网站获取类别,我也使用相同的参考作为发布。
此类别Fetcher方法返回类别的数据表。这个方法挂起了我的UI,所以我需要在线程中实现它。
但我不知道如何在线程中传递ref并获取返回值。
这就是我如何传递价值观。
Categorydt = objPostDataFetcher.FetchCategories(ref httpHelper);
我想在Thread中调用此方法。请给我任何想法和建议。 提前致谢。
答案 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)
最简单的方法是使用异步委托,因为这将为您提供参数传递和返回值。但是,值得注意的是,这将在线程池线程上运行,如果您的调用非常长,可能不适用。无论如何,从代表开始,看看它是如何表现的。这里有一个很好的教程:
答案 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);
}
}