1.程序功能介绍
一开始在窗体form1中,点击按钮button1,textlable标签显示“等待2s,跳转到窗体2”,之后便隐藏窗体1,显示窗体2.
2.实现思路及代码
在点击事件中有:
①显示文字
②Thread.Sleep(2000);
③等待2秒结束,跳转到窗体2
但是上面的Sleep()有可能会阻塞线程,导致显示文字不能完全显示,便已经跳到了窗体2.
所以不能用Sleep(),我们改用定时器。
代码如下:
namespace WindowsFormsApp13 {
public partial class Form1 : Form {
//当前线程的上下文
static SynchronizationContext synt; //线程切换,异步执行要用到
public Form1() {
synt = SynchronizationContext.Current; //不能在申明时初始化
InitializeComponent(); //初始化组件
}
private void button1_Click(object sender, EventArgs e) {
this.result.Text = "等待2s,跳转到窗体2";
//不用Sleep(),用定时器
//2秒的定时器定时器
System.Timers.Timer t = new System.Timers.Timer(2000);
//达到2秒间隔时发生的事件
t.Elapsed += new System.Timers.ElapsedEventHandler(tiaoZ); //执行tiaoZ()方法,进行窗体跳转
t.AutoReset = false; //只执行一次,不循环定时
t.Enabled = true; //定时器可用
}
//两个参数必须有,不然会报错。可用快捷键生成该方法
private void tiaoZ(object sender, ElapsedEventArgs e) {
//不能直接像下面这样进行UI操作,因为该方法是在线程当中。需要通过线程切换
//this.Hide();
//new Form2().Show();
//切换到context申明的线程,异步执行
//第一个参数可以直接传入方法名,第二个参数为传递的参数,不用则为Null
synt.Post(new SendOrPostCallback(real),null);
}
private void real(object state) { //在UI线程中,可进行UI操作
this.Hide();
new Form2().Show();
}
}
}