using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Basler.Pylon; namespace WindowsFormsApp1 { public partial class Form1 : Form { //public class DoubleBufferedPictureBox : PictureBox //{ // public DoubleBufferedPictureBox() // { // this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true); // this.UpdateStyles(); // } //} private readonly Basler Basler; // 定義一個 PictureBox 的列表 public List pictureBoxes; public Form1() { InitializeComponent(); //// 使用自定義的PictureBox類 //DoubleBufferedPictureBox pictureBox1 = new DoubleBufferedPictureBox(); //DoubleBufferedPictureBox pictureBox2 = new DoubleBufferedPictureBox(); Basler = new Basler(this); Basler.CameraImageEvent += Camera_CameraImageEvent; //Basler.CameraImageEvent1 += Camera_CameraImageEvent1; // 在構造函數中初始化 pictureBoxes 列表 pictureBoxes = new List { pictureBox1, pictureBox2 /*, 其他 PictureBox 控件 */ }; } private void Form1_Load(object sender, EventArgs e) { } private void button5_Click(object sender, EventArgs e) { textBox1.Text = Basler.CameraNumber.ToString(); //如果连接相机个数大于0的话 初始化之前写的CameraInit(); if (Basler.CameraNumber > 0) { Basler.CameraInit(); } else { MessageBox.Show("未連接到相機"); Unable(); } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Basler.DestroyCamera(); pictureBox1.Image?.Dispose(); pictureBox2.Image?.Dispose(); } void Unable() { this.button1.Enabled = false; this.button2.Enabled = false; this.button3.Enabled = false; this.button4.Enabled = false; } private void Camera_CameraImageEvent(Bitmap bmp, int cameraIndex) { // 確保 cameraIndex 不超出範圍 if (cameraIndex >= 0 && cameraIndex < pictureBoxes.Count) { // 根據 cameraIndex 決定要更新哪個 pictureBox PictureBox pictureBoxToUpdate = pictureBoxes[cameraIndex]; //使用委托进行跨线程交互 防止线程卡死状态在Invoke前面加一个Begin pictureBoxToUpdate.BeginInvoke(new MethodInvoker(delegate { Bitmap old = pictureBoxToUpdate.Image as Bitmap; pictureBoxToUpdate.Image = bmp; if (old != null) old.Dispose(); })); } else { Console.WriteLine($"無效的相機索引:{cameraIndex}"); } } private void button2_Click(object sender, EventArgs e) { Basler.OneShot(0); } private void button8_Click(object sender, EventArgs e) { Basler.OneShot(1); } private void button3_Click(object sender, EventArgs e) { Basler.Stop(0); button3.Enabled = false; button4.Enabled = true; button2.Enabled = true; } private void button7_Click(object sender, EventArgs e) { Basler.Stop(1); button7.Enabled = false; button6.Enabled = true; button8.Enabled = true; } private void button4_Click(object sender, EventArgs e) { Basler.KeepShot(0); button4.Enabled = false; button2.Enabled = false; } private void button6_Click(object sender, EventArgs e) { Basler.KeepShot(1); button6.Enabled = false; button8.Enabled = false; } private void button1_Click(object sender, EventArgs e) { Basler.Close(); } } }