0

我对 .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());
            }
        }
4

3 回答 3

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);
  }
}
于 2009-04-18T12:49:12.850 回答
1

最简单的方法是使用闭包来捕获您想要的所有变量(即使用匿名方法或 lambda 表达式)。如果您使用循环,您需要注意准确捕获的内容,但它比通过对象并必须将其转换回正确的类型等更方便。

于 2009-04-18T12:38:38.397 回答
1

除了已经说过的:如果CustomClass在您的控制之下并且异步调用SaveData是一个常见的用例,您可以考虑提供一个SaveDataAsync方法:

class CustomClass {

    public void SaveDataAsync(string path) {
        ThreadPool.QueueUserWorkItem(state => this.SaveData(path));
    }

    public void SaveData(string path) {
        ...
    }
}

请参阅基于事件的异步模式

于 2009-04-18T13:19:21.247 回答