我想删除警告:“将其替换为针对具有强标识的对象的锁”

本文关键字:标识 对象 警告 删除 替换 | 更新日期: 2023-09-27 18:17:17

我有一个用于播放视频的ActiveX COM对象,并在C#应用程序中使用它。 声明如下:

private AxVIDEOPLAYERUILib.AxVideoPlayerUI axVideoPlayerUI;

在我的代码中,有这样的锁:

lock (axVideoPlayerUI)
{
     axVideoPlayerUI.EnableControls = 1;
     axVideoPlayerUI.Visible = true;
     axVideoPlayerUI.ShowOverlay = 1;
     axVideoPlayerUI.OverlayPosition = 3;
     axVideoPlayerUI.Play();         
 }

但是我收到警告,我想摆脱:

警告 1 CA2002 : Microsoft.可靠性 : "VideoPlayerControl.LoadRecording(RecordVideo, int("锁定在 类型为"AxVideoPlayerUI"的参考。将其替换为针对的锁定 具有强标识的对象。

从此处的此链接 http://msdn.microsoft.com/en-us/library/ms182290.aspx 它指出以下对象具有弱标识:

MarshalByRefObject, ExecutionEngineException, OutOfMemoryException, StackOverflowException, String, MemberInfo, ParameterInfo, Thread.

但我的对象不属于这些类别中的任何一个。

我还尝试将我的对象设置为静态,如下所述:C# 锁和代码分析警告 CA2002,但这给了我错误:

错误 1 成员"MyNameSpace.VideoPlayerControl.axVideoPlayerUI"无法 使用实例引用进行访问;使用类型名称限定它 相反

有谁知道我如何摆脱原始警告?

我想删除警告:“将其替换为针对具有强标识的对象的锁”

您可以声明一个单独的对象来用于锁定:

private AxVIDEOPLAYERUILib.AxVideoPlayerUI axVideoPlayerUI;
private object axVideoPlayerUILock = new object();

和:

lock (axVideoPlayerUILock)
{
   ...

COM代理由System.__ComObject实现,而又从MarshalByRefObject派生。也许指南可以更清楚地表明,从上述类型派生的类型也不可用。