我想问的是如果一个方法里有2段代码向下面这样
private void init()
{
timer.start();
Form f = new Form();
}
timer是一个定时器,用来运行一个进度条的,我的Form的构造函数里代码很多,会运行20.30秒吧,但是进度条每次都是要等界面实例化后才会出来,也就是说timer.start()方法会在整个方法运行后才会执行。不能用线程,因为界面里会用线程初始化很多控件,会出现一个线程创建的控件不能作为另一线程创建控件的父级这种错误,大家有什么好方法吗?
private void init()
{
timer.start();
Form f = new Form();
}
timer是一个定时器,用来运行一个进度条的,我的Form的构造函数里代码很多,会运行20.30秒吧,但是进度条每次都是要等界面实例化后才会出来,也就是说timer.start()方法会在整个方法运行后才会执行。不能用线程,因为界面里会用线程初始化很多控件,会出现一个线程创建的控件不能作为另一线程创建控件的父级这种错误,大家有什么好方法吗?
Form f = new Form();
timer.start();
public partial class LoginLoading : Form
{
public static MainForm mainForm; public static bool isLoad = true; private Thread progressBarThread; private int progressBarValue = 1; private bool flag; public LoginLoading()
{
InitializeComponent();
} private void LoginLoading_Load(object sender, EventArgs e)
{
progressBarThread = new Thread(RunProgressBar);
progressBarThread.Start();
this.backgroundWorker.RunWorkerAsync();
} private void RunProgressBar()
{
flag = true;
while (flag)
{
this.progressBar.Value = progressBarValue;
progressBarValue++;
Thread.Sleep(200);
}
} private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
if (mainForm == null)
{
mainForm = new MainForm();
}
flag = false;
this.progressBar.Value = 100;
Thread.Sleep(100);
} private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Hide();
Thread.Sleep(500);
mainForm.Show();
}
}
public partial class MainForm : Form
{
public MainForm()
{
MainForm_Load(null,null);
}
public void MainForm_Load(object sender, EventArgs e)
{
if (LoginLoading.isLoad)
{
LoginLoading.isLoad = false;
Thread thread = new Thread(new ThreadStart(initControl));
thread.IsBackground = true;
thread.Start();
}
}
public void initControl()
{
if (control == null)
{
pnlMain.Invoke((EventHandler)(delegate
{
control = new Control();
}));
}
}
}在主页面中我点击某个按钮,添加某个控件时候一样会出一个线程创建的控件不能作为另一线程创建控件的父级这种错误。