在我写的软件中,我将从外部设备(通过USB连接)读取一些数据.我给出的驱动程序(DLL文件)不是线程安全的,一次只能使用一个实例.我必须在C#中为这些驱动程序编写一个包装器.鉴于我有一个多线程应用程序,我想确保:
>始终只使用一个实例(可能包装器是单件?).
>它可以被处理以释放那里的驱动程序和资源(Idisposable?).
从Disposable Singleton我可以看出意见是分歧的,单身是否可以是不可信的.也许两者都有更好的解决方案?欢迎任何帮助.
现在我有一个Idisposable单例,如下所示:
using System; using System.Runtime.InteropServices; namespace Philips.Research.Myotrace.DataReading.Devices { class MyDevice: Idisposable { private static volatile MyDeviceInstance; private static object SyncRoot = new Object(); private bool disposed = false; private MyDevice() { //initialize unmanaged resources here (call LoadLibrary,Initialize,Start etc) } public MyDevice GetInstance() { if (Instance == null) { lock (SyncRoot) { if (Instance == null) { Instance = new MyDevice(); } } } return Instance; } public void dispose() { this.dispose(true); } protected virtual void dispose(bool disposing) { if (!this.disposed) { if (disposing) { //dispose of unmanaged resources here (call Stop and Close from reflection code Instance = null; } this.disposed = true; } } [DllImport("devicedrivers.dll")] private static extern bool Initialize(); [DllImport("devicedrivers.dll")] private static extern bool LoadLibrary(); [DllImport("devicedrivers.dll")] private static extern bool Start(); [DllImport("devicedrivers.dll")] private static extern bool Stop(); [DllImport("devicedrivers.dll")] private static extern bool Close(); //and few more } }
解决方法
原文地址:https://www.jb51.cc/csharp/100450.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。