C#跨线程访问控件和跨线程form显示
https://www.shuzhiduo.com/A/ZOJPk2Glzv/
跨线程访问控件
// 主代码
// An highlighted block
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
m_SyncContext = SynchronizationContext.Current;
}
pic p = new pic();
SynchronizationContext m_SyncContext = null;
private void button1_Click(object sender, EventArgs e)
{
Thread TH = new Thread(new ThreadStart(PIC));
TH.Start();
textBox1.Text = DateTime.Now.ToString();
}
void PIC()
{
m_SyncContext.Post(SetTextSafePost,"");
string[] path = new string[2];
path[0] = @"D:\TEST\Halcon\IMGs\peppers.png";
path[1] = @"D:\TEST\Halcon\IMGs\lena.jpg";
Task t1 = new Task(() =>
{
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(100);
System.Threading.Thread.Sleep(1000);
if (i % 2 == 0)
{
Task t = new Task(() =>
{
p.pb.Image = Image.FromFile(path[0]);
});
t.Start();
}
else
{
p.pb.Image = Image.FromFile(path[1]);
}
}
m_SyncContext.Post(SetTextSafePost1, "");
});
t1.Start();
}
private void SetTextSafePost(object text)
{
p.Show();
}
private void SetTextSafePost1(object text)
{
p.Hide();
}
}
}
// 要显示的Form
// An highlighted block
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class pic : Form
{
public pic()
{
InitializeComponent();
}
public PictureBox pb;
private void pic_Load(object sender, EventArgs e)
{
this.pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pb = pictureBox1;
}
}
}