2012-05-16 3 views
0

RFID 모토로라 핸드 헬드 장치로 작업 한 것은 이번이 처음입니다. 이 응용 프로그램의 요점은 장치와 함께 사진을 찍을 수 있고 "방아쇠"가 당겨지는 각 그림을 저장할 수있는 것입니다. 어떤 이유로 StartCapture() 메서드를 한 번 실행하면 한 장의 그림 만 저장되며 메서드가 다시 실행되지 않습니다. 응용 프로그램이 실행 중입니다. Symbol.Imaging2 클래스 라이브러리를 사용 해본 경험이있는 사람의 조언은 훌륭합니다.StartCapture() 메서드가 한 번만 실행되는 이유는 무엇입니까?

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Drawing; 
using System.Diagnostics; 
using Symbol; 
using Symbol.ResourceCoordination; 
using Symbol.RFID3; 
using Symbol.Imaging2; 


namespace TagReaderMobile 
{ 
    public partial class Form1 : Form 
    { 
     // private RFIDReader _reader = null; 
     private Trigger _trigger = null; 
     private Imaging2 Imager = new Imaging2(); //initializes available camera 
     private int fileNumber = 0; 
     //private TabPage _openTagPage = null; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     public Trigger Trigger 
     { 
      get 
      { 
       if (_trigger == null) 
       { 
        _trigger = 
         new Trigger(new TriggerDevice(TriggerID.ALL_TRIGGERS, new ArrayList())); 
       } 

       return _trigger; 
      } 
     } 

     private void InitializeAllTriggers() 
     { 
      if (!Trigger.IsStage2InUse) 
      { 
       Trigger.Stage2Notify += (_trigger_Stage2Notify); 
      } 
     } 

     private void DisconnectTriggers() 
     { 
      if (_trigger != null) 
      { 
       _trigger.Dispose(); 
       _trigger = null; 
      } 
     } 

     private void _trigger_Stage2Notify(object sender, TriggerEventArgs e) 
     { 
      if (e.NewState == TriggerState.STAGE2) 
      { 
       UpdateTriggerState(true); 
      } 
      else 
      { 
       UpdateTriggerState(false); 
      } 
     } 

     private void UpdateTriggerState(bool triggerPulled) 
     { 
      var workToDo = new Func<bool, bool>(x => 
      { 
       if (x) 
       { 
        picTrigger1.Image = Properties.Resources.go; 
        picTrigger2.Image = Properties.Resources.go; 
       } 
       else 
       { 
        picTrigger1.Image = Properties.Resources.stop; 
        picTrigger2.Image = Properties.Resources.stop; 
       } 
       return true; 
      }); 

      if (InvokeRequired) 
      { 
       Invoke(workToDo, new object[] { triggerPulled }); 
      } 
      else 
      { 
       workToDo(triggerPulled); 
      } 
     } 

     private void Form1_Activated(object sender, EventArgs e) 
     { 
      UpdateTriggerState(false); 
      //InitializeAllTriggers(); 

      ConfigureImager(); 
     } 

     private void Form1_Deactivate(object sender, EventArgs e) 
     { 
      DisconnectTriggers(); 

     } 

     private void ConfigureImager() // Image Capture Method 
     { 
      if (Imager != null) 
      { 
       Imager.Enable(); 
       Imager.StartAcquisition(pictureBox1); 
       Imager.OnStatus += new Imaging2.OnStatusHandler(Image_OnStatus); 
       Imager.OnCapture += new Imaging2.OnCaptureHandler(Image_OnCapture); 

       StartCapture(); 

      } 
     } 

     private void StartCapture() 
     { 
      Imager.Config.Activators.FreezeTimeout = 3000; 
      Imager.Config.Activators.Triggers = new[] { Triggers.ALLTRIGGERS }; 
      IMGResults result = Imager.CaptureImage(); 
     } 

     void Image_OnCapture(ImageData imageData) 
     { 
      Imager.Enable(); 
      Debug.WriteLine("Path=" + Program.AppPath); 

      System.Drawing.Image bitmap = imageData.GetBitmap(); 
      bitmap.Save(@"\My Documents\My Pictures\Image" + fileNumber + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
      try 
      { 
       bitmap.Save(@"\My Documents\My Pictures\Image" + fileNumber + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 
      } 
      catch(Exception e) 
      { 
       Debug.WriteLine(e.Message); 
       Debug.WriteLine(e.StackTrace); 
      } 
      fileNumber++; 
      Debug.WriteLine("OnCapture: " + imageData.Results.ToString()); 
     } 

     private void Image_OnStatus(StatusData statusData) 
     { 
      Debug.WriteLine("Status: " + statusData.EventType); 
     } 
    } 
} 

답변

1

은 트리거가 발사 될 때 때문에, ConfigureImager가 호출됩니다. 처음에는 Imager 개체가 만들어지고 StartCapture이라는 개체가 호출됩니다. 두 번째에는 Imager이 이미 있으므로 생성되지 않지만 if 블록으로 인해 StartCapture도 호출되지 않습니다.

+0

그래서 새로운 Imager 객체를 매번 만들 수 있습니다. – kevin

+0

또는 기존 객체를 다시 사용하십시오 ... – slugonamission