Я разрабатываю C# .dll, который будет использоваться в других приложениях. Я использую Aforge для камеры.
Бывают случаи, когда другие приложения ломают sh и не могут отключить камеру (камера logitech остается с включенным светодиодом).
Если я снова открою приложение он не может подключиться к камере. Есть ли способ восстановить соединение с камерой, не отключая ее от USB-порта?
Я пытался убить аналогичный процесс, но он не работал
public bool connectCamera_dll(string id_Camera, out string error)
{
Process myProc = Process.GetCurrentProcess();
Process[] p = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
foreach (var pro in p)
{
if (pro.Id != myProc.Id)
{
pro.Kill();
}
}
myProc = null;
Array.Clear(p, 0, p.Length);
VideoCapabilities videoCap = null;
//Check if id exist
bool idExist = false;
foreach (var section in iniData.Sections)
{
if (section.SectionName.Equals(id_Camera))
{
idExist = true;
break;
}
else
{
idExist = false;
}
}
if (idExist)
{
try
{
string MonikerString = iniData[id_Camera]["cameraID"];
camera = new VideoCaptureDevice(MonikerString);
if (!SupportFrameSizes())
{
error = "Camera not Connected: not detected";
return false;
}
foreach (var capabilities in videoCapabilities)
{
if (capabilities.FrameSize.Width.ToString().Equals(iniData[id_Camera]["ResolutionWith"]))
{
if (capabilities.FrameSize.Height.ToString().Equals(iniData[id_Camera]["ResolutionHeight"]))
{
videoCap = capabilities;
break;
}
else
{
videoCap = null;
}
}
}
if (videoCap != null)
{
camera.VideoResolution = videoCap;
camera.NewFrame += new NewFrameEventHandler(video_NewFrame);
camera.Start();
if (camera.IsRunning)
{
//bool ok = true;
}
//Wait for camera frames
int timeout = 0;
while (_lastFrame == null)
{
System.Threading.Thread.Sleep(1);
timeout++;
if (timeout >= 5000)
{
GC();
myProc = Process.GetCurrentProcess();
p = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName);
foreach (var pro in p)
{
if (pro.Id != myProc.Id)
{
pro.Kill();
}
}
throw new Exception("Camera not responding");
}
}
}
//loadWebcamConfiguration();
}
catch (Exception ex)
{
error = ex.Message;
return false;
}
error = "";
//return true;
}
else
{
error = "Camera ID not found";
return false;
}
error = camera.IsRunning ? "" : "Camera not Connected: is not running";
return camera.IsRunning;
}