1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public static class MyTaskCreator
{
private static Hashtable _guids = new Hashtable();
private static Hashtable _results = new Hashtable();
public static int Execute(string serverName, string task)
{
Guid guid = Guid.NewGuid();
ManualResetEvent manualEvent = new ManualResetEvent(false);
int result;
_guids.Add(guid, manualEvent);
_results.Add(guid, null);
XmlDocumentFragment xmlTask = new XmlDocument().CreateDocumentFragment();
xmlTask .InnerXml = "<mytask><![CDATA[" + task + "]]></mytask>";
MySocket.Enqueue(new MySocketTask(guid, serverName, xmlTask, OnCompleted));
manualEvent.WaitOne();
result = (int)_results[guid];
_guids.Remove(guid);
_results.Remove(guid);
return result;
}
private static void OnCompleted(Guid guid, XmlTextReader reader)
{
reader.ReadToFollowing("return");
_results[guid] = int.Parse(reader.GetAttribute("value"));
((ManualResetEvent)_guids[guid]).Set();
}
} |
Partager