Я пытаюсь сделать снимок через веб-камеру. Это мой код:
using System;
using System.Text;
using System.Drawing;
using System.Threading;
using AForge.Video.DirectShow;
using AForge.Video;
namespace WebCamShot
{
class Program
{
static FilterInfoCollection WebcamColl;
static VideoCaptureDevice Device;
static void Main(string[] args)
{
WebcamColl = new FilterInfoCollection(FilterCategory.VideoInputDevice);
Console.WriteLine("Press Any Key To Capture Photo !");
Console.ReadKey();
Device = new VideoCaptureDevice(WebcamColl[0].MonikerString);
Device.NewFrame += Device_NewFrame;
Device.Start();
Console.ReadLine();
}
static void Device_NewFrame(object sender, NewFrameEventArgs e)
{
Bitmap Bmp = (Bitmap)e.Frame.Clone();
Bmp.Save("D:\\Foo\\Bar.png");
Console.WriteLine("Snapshot Saved.");
/*
Console.WriteLine("Stopping ...");
Device.SignalToStop();
Console.WriteLine("Stopped .");
*/
}
}
}
Это работает хорошо, но теперь я хочу использовать свой код для создания моментального снимка каждую минуту.
По этой причине я добавил эту строку кода: Thread.Sleep(1000 * 60); // 1000 Milliseconds (1 Second) * 60 == One minute.
К сожалению, эта строка не дает мне желаемого результата - она по-прежнему делает снимки, как и раньше, но просто сохраняет фотографии в файл каждую минуту. Что я на самом деле хочу сделать, так это то, что мой код будет запускать событие «Device_NewFrame» каждую минуту.
Как мне это сделать? Я буду рад получить некоторую помощь .. Спасибо!
EDIT: Как предложил Армен Агаджанян, я добавил в свой код таймер. Этот таймер Инициализирует объект устройства каждую минуту, регистрирует новый объект устройства в событии Device_NewFrame и запускает действие устройства. После этого раскомментирую этот код в теле события:
Console.WriteLine("Stopping ...");
Device.SignalToStop();
Console.WriteLine("Stopped .");
Теперь код делает снимок каждую минуту.