我有一个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'不能 使用实例引用访问;使用类型名称限定它 代替
有谁知道我怎么能摆脱原来的警告?
答案 0 :(得分:6)
您可以声明一个单独的对象用于锁定:
private AxVIDEOPLAYERUILib.AxVideoPlayerUI axVideoPlayerUI;
private object axVideoPlayerUILock = new object();
和
lock (axVideoPlayerUILock)
{
...
COM代理由System.__ComObject
实施,后者又来自MarshalByRefObject
。也许指导可以更清楚的是,从提到的那些派生的类型也是不可用的。