我想删除警告:“将其替换为针对具有强标识的对象的锁”
本文关键字:标识 对象 警告 删除 替换 | 更新日期: 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
派生。也许指南可以更清楚地表明,从上述类型派生的类型也不可用。