Aforgeを使用してWebカメラを実行することができました。コードはここの私の答えにあります。
今、私はいくつかのコンピュータビジョンのことをして、いくつかの結果をメインフォームに戻したいと思います。私が抱えているスレッドの問題は、そのコードのこの部分にあります。
void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
{ Bitmap video = (Bitmap)eventArgs.Frame.Clone();
pictureBox1.Image = video;
// count red colors
// not yet written
TextBox1.text = "demo error"; // >> i like to return a value to the main form
}
ただし、問題は別のスレッドでビデオフレームを実行していることであり、そのスレッドからメインフォームに回答を返すことができなくなりました。私はAforgeを作成しませんでした。リンクして、フォームで機能させるだけでした。
Aforgeビデオの動作方法を変更することはできません。つまり、私がやりたいことである何かを取り戻すことは決してできなかったということです。テキストボックス内の文字列テキストのように、結果を取り戻す方法はありますか。このコードが実行されるメインフォームでは?
スレッドのサンプルコードに従うことはできますが、Aforgeでのビデオ取得の設計方法にあまり影響を与えなかったため、これは少し頭がおかしいです。
テキストボックスを更新するためだけに別のスレッドを上げることが機能するかどうか疑問に思っていましたが、最終的には多くのスレッドが作成され、カーネルの切り替え負荷が大きくなるのではないかと思います。
いくつかの追加情報:上記のコードスレッドは、以下のこのボタン関数で開始されます。
private void button1_Click(object sender, EventArgs e)
{ FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[comboBox1.SelectedIndex].MonikerString);
FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
FinalVideo.Start();
}