Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- string method(string s)
- {
- form.ShowString(s);
- //дождаться события SomeEvent
- return //результат из события
- }
- partial class MainForm:Form
- {
- event Action<string> SomeEvent;//вызывается, например, по нажатию кнопки
- void ShowString(string s)
- {
- //тело метода, провоцирует событие SomeEvent
- }
- }
- async Task<string> method(string s)
- {
- var tcs = new TaskCompletionSource<string>();
- form.SomeEvent += tcs.SetResult; // Повезло что совпали сигнатуры
- try {
- form.ShowString(s);
- return await tcs.Task;
- } finally {
- form.SomeEvent -= tcs.SetResult;
- }
- }
- async Task<string> ShowString(string s)
- {
- Debug.Assert(form.someTCS == null);
- var tcs = form.someTCS = new TaskCompletionSource<string>();
- try {
- form.ShowString(s);
- return tcs.Task;
- } finally {
- form.someTCS = null;
- }
- }
- async Task<string> ShowString(string s)
- {
- var tcs = new TaskCompletionSource<string>();
- SomeEventHandler handler = (o, e) => tcs.SetResult(e.Result);
- form.SomeEvent += handler;
- try {
- form.ShowString(s);
- return await tcs.Task;
- } finally {
- form.SomeEvent -= handler;
- }
- }
- async Task method2()
- {
- var msg = await method("Hello, world!");
- // ...
- }
Add Comment
Please, Sign In to add comment