【发布时间】:2012-11-20 19:41:23
【问题描述】:
我不是一个用过的 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。
“等待完成”消息永远不会被打印出来......
我做错了什么?
谢谢
【问题讨论】:
-
为什么需要重置事件? (您确定某处的其他代码没有将其设置为 null 吗?从您在此处发布的代码来看,它不应该是……)
-
你首先应该做什么
-
@Cameron,不管我是调用 Reset、set 还是 WaitOne。它没有定义。为什么?
-
@ambs 也许你还有一些其他变量/属性等命名为 allDone ?
-
只有这些对 allDone 的引用才是这个命名空间/类。
标签: c# variables asynchronous static manualresetevent