各位大佬们,我想要做个下图的窗体,treeview有三个节点,每个节点调出一个用户控件,三个界面是一样的。
想要实现的功能是,点击开启线程,创建一个线程并调用计时器开始计时,计时器半秒给数值+1,关闭线程则丢弃线程。三个界面完全一致,但是发现三个界面的线程号会来回跳跃,说明线程一直在切换,而不是我想象中三个界面三个线程稳定执行。
UserControl的代码如下,三个界面一致。
请各位大佬指教,我的线程开闭有什么问题吗?怎么能实现我想要的功能呢??
public partial class UserControl1 : UserControl
{
private Thread m_multiGetTestThread;
private Boolean m_multiGetTestThreadStart = false;
System.Timers.Timer myTimer;
static int i = 0;
public UserControl1()
{
InitializeComponent();
}
private void UserControl1_Load(object sender, EventArgs e)
{
int interval = 500;
myTimer = new System.Timers.Timer(interval);
myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_tick);
textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
if (m_multiGetTestThreadStart == false)
{
m_multiGetTestThreadStart = true;
m_multiGetTestThread = new Thread(connect);
m_multiGetTestThread.Start();
this.button1.Enabled = false;
}
textBox2.Text = m_multiGetTestThread.ThreadState.ToString();
textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
}
private void connect()
{
i = 0;
myTimer.Start();
}
private void myTimer_tick(object sender, EventArgs e)
{
textBox1.Text = i.ToString();
textBox2.Text = m_multiGetTestThread.ThreadState.ToString();
textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
i++;
}
private void button2_Click(object sender, EventArgs e)
{
myTimer.Start();
}
private void button3_Click(object sender, EventArgs e)
{
myTimer.Stop();
textBox2.Text = m_multiGetTestThread.ThreadState.ToString();
textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
}
private void button4_Click(object sender, EventArgs e)
{
myTimer.Stop();
m_multiGetTestThreadStart = false;
m_multiGetTestThread.Abort();
this.button1.Enabled = true;
textBox2.Text = m_multiGetTestThread.ThreadState.ToString();
textBox3.Text = Thread.CurrentThread.ManagedThreadId.ToString();
}
}
```**