UWP/C# 如何检测当前正在占用笔记本前置摄像头的应用程序
UWP摄像头自占用问题解决方案
核心问题答复
UWP 沙箱运行机制限制了应用的系统信息获取权限,没有公开的官方API可以直接查询当前正在占用摄像头的应用列表,也无法直接判定摄像头的占用方是否为当前应用自身。
自占用报错根因
你遇到的快速最小化再最大化触发的摄像头占用报错,属于资源释放时序问题:UWP应用最小化时系统会自动回收硬件设备资源,此时旧的MediaCapture实例还未完全释放摄像头资源,应用恢复时立刻触发的新初始化请求就会出现“自身占用自身”的冲突。
可行修复方案
- 提前处理应用生命周期事件:监听
CoreWindow.VisibilityChanged、Application.Suspending、Application.Resuming生命周期事件,应用失去焦点/进入挂起状态时,主动执行资源清理逻辑:- 调用
_mediaCapture.StopPreviewAsync()停止预览 - 调用
_mediaCapture.Dispose()释放资源 - 将
_mediaCapture实例置为null
- 调用
- 初始化前加状态管控:新增
isCameraInitializing标志位,初始化时如果标志位为true就直接返回,避免并发触发多次初始化请求;初始化完成/失败后再重置标志位。 - 报错后加重试逻辑:捕获到摄像头占用错误时,先延迟100200ms重试初始化操作,最多重试23次,绝大多数自占用场景重试后都可以正常初始化。
- 重试全部失败后再执行兜底逻辑:隐藏摄像头预览、关闭切换按钮即可。
内容的提问来源于stack exchange,提问作者Sateesh Kumar
相关产品推荐
相关产品推荐

