我想删除警告:“将此替换为具有强身份的对象的锁定”

时间:2013-06-07 10:27:06

标签: c# .net com

我有一个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# lock and code analysis warning CA2002但是这给了我错误:

  

错误1成员'MyNameSpace.VideoPlayerControl.axVideoPlayerUI'不能   使用实例引用访问;使用类型名称限定它   代替

有谁知道我怎么能摆脱原来的警告?

1 个答案:

答案 0 :(得分:6)

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

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

lock (axVideoPlayerUILock)
{
   ...

COM代理由System.__ComObject实施,后者又来自MarshalByRefObject。也许指导可以更清楚的是,从提到的那些派生的类型也是不可用的。