C#一个方法里代码同时运行(不用线程)

wozuiaijiahui 2012-05-23 11:13:59
我想问的是如果一个方法里有2段代码向下面这样


private void init()
{
timer.start();
Form f = new Form();
}


timer是一个定时器,用来运行一个进度条的,我的Form的构造函数里代码很多,会运行20.30秒吧,但是进度条每次都是要等界面实例化后才会出来,也就是说timer.start()方法会在整个方法运行后才会执行。不能用线程,因为界面里会用线程初始化很多控件,会出现一个线程创建的控件不能作为另一线程创建控件的父级这种错误,大家有什么好方法吗?
...全文
236 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
okkk 2012-05-25
  • 打赏
  • 举报
回复
直接show 你的进度条就可以了。不要用showdialog
okkk 2012-05-25
  • 打赏
  • 举报
回复
直接show 你的进度条就可以了。不要用showdialog
wozuiaijiahui 2012-05-25
  • 打赏
  • 举报
回复
问题解决了,去掉主页面里的线程,在初始化主页面的时候用委托。多谢大家的意见
wangsong145 2012-05-23
  • 打赏
  • 举报
回复
你得使用委托才行
奔跑前行 2012-05-23
  • 打赏
  • 举报
回复
BackgroundWorker 可以考虑下看看
test2050 2012-05-23
  • 打赏
  • 举报
回复
代码是有先后执行顺序的,你做进度条的话先搜索些例子代码学习后再自己做。不要自己想当然着做。
cnfixit 2012-05-23
  • 打赏
  • 举报
回复
一个线程创建的控件不能作为另一线程创建控件的父级这种错误

看看委托
bdmh 2012-05-23
  • 打赏
  • 举报
回复
换个位置
Form f = new Form();
timer.start();
cnfixit 2012-05-23
  • 打赏
  • 举报
回复
程序是顺序执行的,并不是说timer.start()在整个方法运行后才会执行,而是Form f = new Form();的构造函数执行时间太久,看上去好像是在整个方法运行后才执行的样子
wozuiaijiahui 2012-05-23
  • 打赏
  • 举报
回复
这个是我刚开始的代码
   
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();
}));
}
}
}

在主页面中我点击某个按钮,添加某个控件时候一样会出一个线程创建的控件不能作为另一线程创建控件的父级这种错误。
wozuiaijiahui 2012-05-23
  • 打赏
  • 举报
回复
BackgroundWorker我倒是用了,但是依然会出同样问题,代码调换位置不行,我需要那样执行的,委托的话貌似也不可以,因为我初始化界面的时候会有一个委托调用的线程。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧