Guest User

Untitled

a guest
Jun 19th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.39 KB | None | 0 0
  1. string method(string s)
  2. {
  3. form.ShowString(s);
  4. //дождаться события SomeEvent
  5. return //результат из события
  6. }
  7.  
  8. partial class MainForm:Form
  9. {
  10. event Action<string> SomeEvent;//вызывается, например, по нажатию кнопки
  11. void ShowString(string s)
  12. {
  13. //тело метода, провоцирует событие SomeEvent
  14. }
  15. }
  16.  
  17. async Task<string> method(string s)
  18. {
  19. var tcs = new TaskCompletionSource<string>();
  20. form.SomeEvent += tcs.SetResult; // Повезло что совпали сигнатуры
  21. try {
  22. form.ShowString(s);
  23. return await tcs.Task;
  24. } finally {
  25. form.SomeEvent -= tcs.SetResult;
  26. }
  27. }
  28.  
  29. async Task<string> ShowString(string s)
  30. {
  31. Debug.Assert(form.someTCS == null);
  32.  
  33. var tcs = form.someTCS = new TaskCompletionSource<string>();
  34. try {
  35. form.ShowString(s);
  36. return tcs.Task;
  37. } finally {
  38. form.someTCS = null;
  39. }
  40. }
  41.  
  42. async Task<string> ShowString(string s)
  43. {
  44. var tcs = new TaskCompletionSource<string>();
  45. SomeEventHandler handler = (o, e) => tcs.SetResult(e.Result);
  46. form.SomeEvent += handler;
  47. try {
  48. form.ShowString(s);
  49. return await tcs.Task;
  50. } finally {
  51. form.SomeEvent -= handler;
  52. }
  53. }
  54.  
  55. async Task method2()
  56. {
  57. var msg = await method("Hello, world!");
  58. // ...
  59. }
Add Comment
Please, Sign In to add comment