静态变量导致C#出现问题(Windows 8)

时间:2012-11-20 19:41:24

标签: c# variables asynchronous static manualresetevent

我不是一个习惯使用的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。

“完成等待”消息根本不会打印...

我做错了什么?

谢谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

allDone.Reset();

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

所有其他电话的等效方法。