我有两种形式。 form1 调用在加载期间启动后台运行线程。 一旦明星跑了。 表单2 会弹出两个按钮(开始和停止)。 当我按下停止按钮时,线程应该暂停,当我按下启动时,暂停线程应该从停止的位置开始执行。
我尝试使用此代码。
myResetEvent.WaitOne();// to pause the thread
myResetEvent.Set(); // to resume the thread.
因为这些事件是在form1中定义的,但我希望它能从form2开始工作。
答案 0 :(得分:0)
最后我得到了答案,它适用于我的案例,发布它,可能会帮助其他人..
表格1代码..
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace thread_example
{
public partial class Form1 : Form
{
private int i = 0;
public Thread Run_thread = null, run1 = null; // thread definition
public static AutoResetEvent myResetEvent = new AutoResetEvent(false);//intially set to false..
public Form1()
{
InitializeComponent();
run1 = new Thread(new ThreadStart(run_tab));
run1.IsBackground = true;
run1.Start();
}
private void run_tab()
{
//do something.
}
private void button1_Click(object sender, EventArgs e)
{
form2 f2 = new form2();
f2.Show();
}
}
}
// Form 2 code...
namespace thread_example
{
public partial class form2 : Form
{
public form2()
{
InitializeComponent();
}
private void btn_stop_Click(object sender, EventArgs e)
{
Form1.myResetEvent.WaitOne();
}
private void button2_Click(object sender, EventArgs e)
{
Form1.myResetEvent.Set();
}
}
}
答案 1 :(得分:-1)
您可以将Event实例作为表单参数传递给第二个表单。
class Form1
{
ManualEvent myResetEvent;
void ShowForm2()
{
var form2 = new Form2(myResetEvent);
form.ShowDialog();
}
}
class Form2
{
ManualEvent myResetEvent;
Form2(ManualEvent event)
{
myResetEvent = event;
}
void StopButtonClick()
{
myResetEvent.Reset();
}
void ContinueButtonClick()
{
myResetEvent.Set();
}
}