還不確定是否正確,反正能正常執行,先記錄下來代碼
public class App
{
private static string result;
private static AutoResetEvent are = new AutoResetEvent(false);
ManualResetEvent mre = new ManualResetEvent(false);
public static Task<string> GetResultAsync()
{
return Task.Run(()=>DoSomething());
}
public static async Task<string> GetResultAsync2()
{
return await Task.Run(() => DoSomething());
}
private static string DoSomething()
{
ClassWithEvent cwe = new ClassWithEvent();
cwe.DataCached += Cwe_DataCached;
cwe.Set(2);
while (!are.WaitOne()) ;
return result;
}
private static void Cwe_DataCached(object sender, string e)
{
result = e;
are.Set();
}
}
public class ClassWithEvent
{
public event EventHandler<string> DataCached;
private void RaiseEvent(string result)
{
DataCached?.Invoke(this, result);
}
public void Set(int delay)
{
Thread.Sleep(delay * 1000);
RaiseEvent("Delay Done");
}
}
private void button2_ClickAsync(object sender, EventArgs e)
{
//string str = Task.Run(()=> App.GetResult2()).Result;
string str = App.GetResultAsync().Result;
//string str = await App.GetResult();
MessageBox.Show(str);
}