C#多线程 创建子窗体
这是我其中一段代码,我现在想每个新建的窗体都单独开一个线程,同时新建的窗体能够传入一个Tag,这里的标签是aControllerInfo,我现在能够做到每个新建的窗体都单独在一个线程里面,但是不能传入Tag,我该如何做?
原码
private void skinButton1_Click(object sender, EventArgs e)
{
//Thread th = new Thread(Set);
////th.IsBackground = true;
//th.Start();
int i = 1;//窗口变量
if (skinListView1.CheckedItems.Count <= 0)
{
MessageBox.Show("请选择需要监控的控制器!");
}
else
{
foreach (ListViewItem item in skinListView1.Items)
{
if (item.Checked == true)
{
var monForm = new MonForm();
//添加一个 监视窗口 来提高用户的辨识度
if (i <= skinListView1.CheckedItems.Count)
{
if (item.Tag is ControllerInfo)
{
ControllerInfo aControllerInfo = item.Tag as ControllerInfo;
monForm.Text = "监视" + " : " + i + " " + "IP地址" + " : " + aControllerInfo.IPAddress.ToString() + " " + "控制系统" + " : " + aControllerInfo.SystemName.ToString();
monForm.Tag = aControllerInfo;
}
i++;
}
monForm.MdiParent = this;
//monForm.WindowState = FormWindowState.Maximized;
monForm.Show();
LayoutMdi(MdiLayout.ArrangeIcons);
}
}
//this.LayoutMdi(MdiLayout.Cascade);
//this.LayoutMdi(MdiLayout.TileHorizontal);
this.skinListView1.Visible = false;
this.skinSplitContainer1.Visible = false;
}
}
实现新建窗体单独在一个线程中,无法传入Tag
public void Set()
{
var mi = new MethodInvoker(this.ShowForm);
this.BeginInvoke(mi);
}
public void ShowForm()
{
var monForm = new MonForm();
monForm.MdiParent = this;
monForm.Show();
}
//线程
Thread th;
private void skinButton1_Click(object sender, EventArgs e)
{
//隐藏 skinListView1
skinListView1.Visible = false;
//隐藏skinSplitContainer1
int i = 1;
if (skinListView1.CheckedItems.Count <= 0)
{
MessageBox.Show("请选择需要监控的控制器!");
}
else
{
foreach (ListViewItem item in skinListView1.Items)
{
th = new Thread(Set);
//后台线程
th.IsBackground = true;
//线程准备就绪
th.Start();
//添加一个 监视窗口 来提高用户的辨识度
if (i <= skinListView1.CheckedItems.Count)
{
if (item.Tag is ControllerInfo)
{
ControllerInfo aControllerInfo = item.Tag as ControllerInfo;
//monForm.Text = "监视" + " : " + i + " " + "IP地址" + " : " + aControllerInfo.IPAddress.ToString() + " " + "控制系统" + " : " + aControllerInfo.SystemName.ToString();
//monForm.Tag = aControllerInfo;
//monForm.Text = "监视" + " : " + i + " " + "IP地址" + " : " + aControllerInfo.IPAddress.ToString() + " " + "控制系统" + " : " + aControllerInfo.SystemName.ToString();
//monForm.Tag = aControllerInfo;
}
i++;
}
}
}
}