我对.NET中的ThreadPool有点新意。我想知道,如果我只能将一个对象发送到我的回调方法,我怎样才能访问类成员变量来调用它的方法? (参见CallBack()中的customClass)
我如何从customClass加载数据?我是否将customClass传递给另一个CallBack方法?这种做法好吗?
正如您所看到的那样,它有点缺乏经验,所以在此过程中的任何提示都会受到赞赏。
谢谢你, 卡瓦
class Program
{
static void Main(string[] args)
{
CustomClass customClass = new CustomClass();
ThreadPool.QueueUserWorkItem(CallBack, "Hello");
Console.Read();
}
private static void CallBack(object state)
{
customClass.SaveData(state.ToString());
}
}
答案 0 :(得分:2)
class Program
{
static void Main(string[] args)
{
CustomClass customClass = new CustomClass();
ThreadPool.QueueUserWorkItem(x => CallBack(customClass, "Hello"));
Console.Read();
}
private static void CallBack(CustomClass custom, string text)
{
customClass.SaveData(text);
}
}
答案 1 :(得分:1)
最简单的方法是使用closure捕获所需的所有变量(即使用匿名方法或lambda表达式)。如果你正在使用循环,你需要小心确切地捕获了什么,但它比通过一个对象并且必须将它强制转换为正确的类型等更容易。
答案 2 :(得分:1)
除了上述内容之外:如果CustomClass
在您的控制之下并且异步调用SaveData
是一个常见用例,您可以考虑提供SaveDataAsync
方法:
class CustomClass {
public void SaveDataAsync(string path) {
ThreadPool.QueueUserWorkItem(state => this.SaveData(path));
}
public void SaveData(string path) {
...
}
}