2012-04-17 78 views
0

我有一個簡單的Winforms應用程序,允許用戶同時選擇多個視頻(文件)並運行後臺工作線程以循環訪問BW中的每個視頻。下面有粘貼代碼,我得到一個NullReferenceException爲「無法創建......捕獲」在這一行在多個後臺工作線程中捕獲類(Emgu)問題

Capture _capture = new Capture(videoFileName) 

在processVideo方法。

N.B:如果我選擇單個視頻,相同的代碼工作正常。所以有一些與Capture類的多個實例有關的問題。

我期望ProcessVideo方法擁有Capture的新實例並單獨打開它。關於我可能做錯什麼的想法?

private void openVideoToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       OpenFileDialog ofd = new OpenFileDialog(); 
       ofd.Filter = "Video | *.AVI;*.MPEG;*.WMV;*.MP4;*.MOV;*.MPG;*.MPEG;*.MTS;*.FLV"; 
       ofd.Multiselect = true; 
       if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
       { 
        string[] videos = ofd.FileNames; 
        if (videos != null) 
        { 

         BackgroundWorker[] bw = new BackgroundWorker[videos.GetLength(0)]; 
         int n = 0; 
         foreach (string video in videos) 
         { 
          bw[n] = new BackgroundWorker(); 
          bw[n].DoWork += new DoWorkEventHandler(bw_DoWork); 
          bw[n++].RunWorkerAsync(video); 
         } 
        } 
       } 
      } 
      catch (NullReferenceException excpt) 
      { 
       MessageBox.Show(excpt.Message); 
      } 

     } 


     void bw_DoWork(object sender, DoWorkEventArgs e) 
     { 
      string filename = (string)e.Argument; 
      ProcessVideo(filename); 
     } 


     private void ProcessVideo(string videoFileName) 
     { 

      Capture _capture = new Capture(videoFileName); 
      UInt64 TOTAL_FRAMES = Convert.ToUInt64(_capture.GetCaptureProperty(Emgu.CV.CvEnum.CAP_PROP.CV_CAP_PROP_FRAME_COUNT)); 
       for (UInt64 n = 0; n < TOTAL_FRAMES; n++) 
       { 
        using (Image<Bgr, Byte> img1 = _capture.QueryFrame()) 
        { 

//do something with the frame 

       } 
     } 

} 

回答

0

我建議你更新SourceSafe中的Service Pack 它可以幫助你

[我想你的代碼是完全有 沒有錯吧。

您在創建對象時,它清楚地看到, 可能有機會的文件格式不支持 或可能是內部錯誤的問題得到了一個錯誤。]

讓我知道,這樣做更新用後,它的工作原理或不。

Regards Red

+0

編輯該問題以顯示位置。謝謝。 – Mikos 2012-04-17 08:27:11

+0

謝謝。但是不能是文件格式或CODEC的問題,因爲當選擇單個文件時相同的文件可以正常工作。多選時出現錯誤。 – Mikos 2012-04-17 13:08:02

+0

順便說一句,什麼是sourceafe服務包?它是來自Microsoft的SCM工具嗎?或者是其他東西?這與這個問題有什麼關係? – Mikos 2012-04-17 13:09:02