1

我不是一个用过的 C# 程序员,所以如果这很愚蠢,对不起:-)

我正在为 Windows 8 开发 C# 应用程序。我需要执行 Web 请求,因此,我有一个回调来处理请求数据。

我正在使用标准方法:

private static ManualResetEvent allDone = new ManualResetEvent(false);

private static void daCallback(IAsyncResult data) {
   ...
   SampleDataSource.allDone.Set();
}

// This is the Class CONSTRUCTOR
public SampleDataSource() {
   # before anything, reset allDone:

  string request = "http://some.url.com";
  HttpWebRequest webRequest = WebRequest.Create(request) as HttpWebRequest;
  webRequest.Method = "POST";

  webRequest.BeginGetResponse(new AsyncCallback(daCallback), webRequest);

  Debug.WriteLine("Asked to begin get response");

  SampleDataSource.allDone.WaitOne(12000);

  Debug.WriteLine("Done Waiting");
   #...
}

运行时,allDone(do_something 内部)未初始化。我什至添加了一个条件来比较 allDone 和 null,是的,它是 null。

“等待完成”消息永远不会被打印出来......

我究竟做错了什么?

谢谢

4

2 回答 2

2

您正在从实例方法调用静态字段。改为使用YourClassName.allDone.Reset()

于 2012-11-20T19:44:28.140 回答
2

您必须在调用前添加类名allDone,因为它是静态的。所以而不是

allDone.Reset();

尝试

//replace CLASS with whatever you named your class
CLASS.allDone.Reset();

所有其他调用的等效方法。

于 2012-11-20T19:45:01.310 回答