Возвращение результата из функции после срабатывания ивента - C#
Формулировка задачи:
Добрых времени суток. Вопрос звучит немного каряво, однако есть функция, которая включает камеру на телефоне:Тут же имеется метод, который будет вызван, когда пользователь сделает фото:Собственно, как подождать завершения OnActivityResult?
private Bitmap bmp; public Bitmap TakePhoto(string fileName) { var intent = new Intent(MediaStore.ActionImageCapture); FilePath = new File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures), $"{fileName}.jpg").AbsolutePath; intent.PutExtra(MediaStore.ExtraOutput, FilePath); StartActivityForResult(intent, 0); //подождать пока OnActivityResult завершит работу return bmp; }
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); bmp = (Bitmap)data.Extras.Get("data"); }
Решение задачи: «Возвращение результата из функции после срабатывания ивента»
textual
Листинг программы
using System; using System.Threading; using System.Threading.Tasks; namespace AddToFriendsExample { class Program { private static Program _program; static void Main(string[] args) { _program = new Program(); _program.Run(args); } private void Run(string[] args) { Console.WriteLine(TakePhoto("gfh")); Console.ReadKey(); } private readonly AutoResetEvent _photoEvent = new AutoResetEvent(false); private string _text; public string TakePhoto(string fileName) { StartActivityForResult(); // Ждём, пока другой поток отправт нам сигнал, что можно продолжать работу. _photoEvent.WaitOne(); return _text; } private void StartActivityForResult() { // Имитация задержки, но без ожидания её вызывающим методом. Task.Run(() => OnActivityResult()); } protected void OnActivityResult() { Thread.Sleep(1000); _text = "data"; _photoEvent.Set(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д