标题:关于线程的问题
只看楼主
lifang521
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-5-30
结帖率:25%
已结贴  问题点数:10 回复次数:3 
关于线程的问题
请问我想做一个线程  private void dbinitial()
        {
            try
            {
                server.Connect(textBoxDriver.Text, textBoxHost.Text, Convert.ToInt32(textBoxPort.Text),
                    textBoxService.Text, textBoxUser.Text, textBoxPassword.Text);
                server.Initialize(textBoxBanner.Text, textBoxOwner.Text);
                success = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
           // this.Close();
        }
   
        private void buttonInit_Click(object sender, EventArgs e)
        {
            Thread fThread = new Thread(new ThreadStart(dbinitial));//开辟一个新的线程
            fThread.Start();
            if ((fThread.ThreadState & (ThreadState.Unstarted | ThreadState.Stopped)) == 0)
            {
                MessageBox.Show("正在执行初始化,请稍候....", "初始化", MessageBoxButtons.OKCancel);

            }
            else
                return;

            
        }
开始时有信息框提示正在执行,结束时,信息框自动消失,用线程控制,将方法定义定义在线程中,这个是怎么实现的,这样写,好像有问题,明明没有执行这个方法,还是有消息框出现。。
搜索更多相关主题的帖子: private 
2011-06-17 16:39
dwwwing
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:284
专家分:986
注 册:2008-10-11
得分:10 
程序代码:
  BackgroundWorker backWorker = new BackgroundWorker();
        Form2 f2 = new Form2();
        public Form1()
        {
            InitializeComponent();
            backWorker.DoWork += new DoWorkEventHandler(backWorker_DoWork);
            backWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backWorker_RunWorkerCompleted);
        }
       
        void backWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Result.ToString().Equals("做完啦"))
            {
                f2.Close();
            }
        }

        void backWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            //做你要做的好了....
            
            e.Result = "做完啦";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            backWorker.RunWorkerAsync();
            f2.Show();
        }
2011-06-17 16:56
lifang521
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-5-30
得分:0 
貌似你没有用线程控制,用的是委托,而且不是MESSAGEBOX。
2011-06-17 17:20
dengkeyu
Rank: 1
等 级:新手上路
帖 子:18
专家分:6
注 册:2010-4-19
得分:0 
二楼的方法应该可以防止界面假死..好些属于后台运行的线程..
2011-07-01 23:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-343198-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051752 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved