c# 多线程中通button pictureBox图片上显示红色ROI
时间: 2023-06-27 15:02:27 浏览: 71
在 C# 多线程中,你需要使用 Invoke 方法将 UI 操作委托给 UI 线程。以下是一个示例代码,展示了如何在多线程中更新 PictureBox 的图片,并在图片上显示红色的矩形 ROI。
```csharp
private void StartButton_Click(object sender, EventArgs e)
{
// Start a new thread
Thread thread = new Thread(new ThreadStart(UpdatePictureBox));
thread.Start();
}
private void UpdatePictureBox()
{
// Load the image
Bitmap bmp = new Bitmap("image.jpg");
// Create a Graphics object from the PictureBox
Graphics g = pictureBox1.CreateGraphics();
// Draw the image on the PictureBox
pictureBox1.Invoke(new Action(() => { pictureBox1.Image = bmp; }));
// Draw a red rectangle on the PictureBox
Pen pen = new Pen(Color.Red, 2);
Rectangle rect = new Rectangle(100, 100, 50, 50);
g.Invoke(new Action(() => { g.DrawRectangle(pen, rect); }));
}
```
在这个示例中,当用户点击按钮时,会启动一个新的线程来更新 PictureBox 的图片。在 UpdatePictureBox 方法中,首先加载图片并将其绘制到 PictureBox 上。然后,使用 Graphics 对象在图片上绘制一个红色的矩形 ROI。
请注意,在更新 PictureBox 的图片和绘制矩形 ROI 时,都使用了 Invoke 方法将 UI 操作委托给 UI 线程。这是因为 UI 控件只能在 UI 线程中进行操作,如果在其他线程中访问它们,会引发异常。因此,使用 Invoke 方法可以确保这些操作在正确的线程中执行。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)