我有一个WPF窗口,其中包含一个RadWebCam控件和与之关联的CameraSettingsControl控件(如在线文档所示)。当我关闭WPF窗口时,没有释放与该窗口关联的内存。我在窗口中实现了一个Finalizer,发现即使在调用了几个GC.Collect()之后,它也没有被调用。罪魁祸首似乎是相机设置控件,当它与RadWebCam控件相关联时。在我的应用程序中,每次窗口调用后都没有释放大约80MB的内存。
我已经包括了一个完整的项目样本,演示了这个问题。只需在终结器上设置一个断点~TakePicture()。当应用程序运行时,点击“拍照”按钮启动相机窗口,然后关闭它。要验证这不仅仅是垃圾收集的延迟,请点击主窗口上的GCCollect按钮几次。直到你退出应用程序,Finalizer才会被调用。
这是我正在使用的Telerik控制WPF,但它也在示例中。
< telerikWebCam: RadWebCam网格。Column ="0" x:Uid="WebCamCaptureWindow_RadWebCam" x:Name="webCam" MinWidth="0" MinHeight="0" AutoStart="False" Margin=" 0,0,0 "
BorderThickness = " 0 "当摄像头被禁用时,调用StartRecording()会导致一个未处理的空引用异常。(当其他网络摄像头发生错误时,例如当网络摄像头被其他应用程序拍摄时,情况就不是这样了)。
我们的应用程序提供了一个后备方案,在网络摄像头不可用时录制音频,为了使其工作,最好能够调用StartRecording()方法而不会导致崩溃,并且仍然触发RecordingStarted事件,就像在“摄像头不可用”错误的情况下一样。
复制步骤:
1.创建一个带有网络摄像头的表单,在关闭时调用Close和Dispose。
2.创建第二个表单,并使用显示第一个表单的按钮。
3.运行该项目,您将在关闭webcam表单时看到一个异常。
复制步骤:
1.在窗户上放一个照相机
2.电脑上没有插摄像头吗
3.调用Start或Stop方法
预期行为:无
实际行为:抛出异常