c# - 等到甚至发生并在处理后继续
问题描述
我正在远程控制外部摄像头。我可以通过异步调用TakePhotoAsync()
方法来拍照,当拍照并准备好下载时,DownloadReady
会发生包含关于拍照的DownloadInfo的事件。我有方法Cam_DownloadReady(...)
来处理这个事件。这是由 API 提供的,我无法更改任何内容。
但我需要同步拍照。类似于 callTakePhotoAsync()
并在这一行等待直到事件DownloadReady
发生,它调用Cam_DownloadReady(...)
方法,然后在执行并完成此方法后,然后// continue..
(如代码部分中标记的那样)。这可能吗?谢谢
public Task<CameraImage> GetImageFromCameraAsync(string cameraId)
{
APIHandler = new CanonAPI();
Camera MainCamera = APIHandler.GetCameraList()[0];
MainCamera.DownloadReady += Cam_DownloadReady;
MainCamera.OpenSession();
MainCamera.TakePhotoAsync();
// wait here until event occurs and is processed
// Cam_DownloadReady(...) is called and finished
// continue ...
}
private void Cam_DownloadReady(Camera sender, DownloadInfo Info)
{
sender.DownloadFile(Info, saveImageDir); //save picture on PC
}
解决方案
您可以通过使用ManualResetEvent来实现:
using System.Threading;
public ManualResetEvent mre = new ManualResetEvent(false); // created in the unsignaled state.
public Task<CameraImage> GetImageFromCameraAsync(string cameraId)
{
mre.Reset(); // Set the state of the event to be nonsignaled
APIHandler = new CanonAPI();
Camera MainCamera = APIHandler.GetCameraList()[0];
MainCamera.DownloadReady += Cam_DownloadReady;
MainCamera.OpenSession();
MainCamera.TakePhotoAsync();
// wait here until event occurs and is processed
mre.WaitOne(); // Block the current thread until the current wait handle receives a signal
// Cam_DownloadReady(...) is called and finished
// continue ...
}
private void Cam_DownloadReady(Camera sender, DownloadInfo Info)
{
sender.DownloadFile(Info, saveImageDir); //save picture on PC
mre.Set(); // Set the state of the event to signaled, allowing mre.WaitOne() above to proceed.
}
推荐阅读
- google-apps-script - Google 脚本 - 查看日志卡在“等待日志,请稍候...”
- javascript - 将第一行存储为对象[名称],获取对应的行/列值
- google-vr - VR 查看网页和 iOS
- c++ - 如何检查方法是否返回错误或值?
- java - 在 PageFactory (Selenium+Java) 中获取 NPE NullPointerException
- typescript - Typescript - 如何禁止两个解析为相同类型的类型别名互换使用?
- javascript - Javascript动画倒计时
- cplex - 如何设置使用完整版 CPLEX 的密钥?
- django - Django 中的 def __str__(self) 中的条件
- python-3.x - 如果关联 ID 的一部分匹配,则来自多行的平均值