在线程里面用timer控件去触发线程,设置3秒后启动一次,为什么启动一次后,不会再触发线程了呢?不明白,求大神解救。感谢感谢

解决方案 »

  1.   

    线程结束了,里面创建的timer就销毁了
      

  2.   

    timer的Elapsed事件里直接执行方法不就行了,为什么要要触发线程;代码贴出来才能帮你找原因;
      

  3.   

     private void timer1_Tick(object sender, EventArgs e)
            {
                timer1.Stop();
                MessageBox.Show("1111111");
                SetLabelText st = new SetLabelText(zhuangHua);
                _thread = new Thread(new ParameterizedThreadStart(st));
                _thread.IsBackground = true;
                _thread.Start();            
            }然后在zhuangHua方法的最后面timer.Start();
      

  4.   

    这是我主要的代码:麻烦给我帮我看看
     private void timer1_Tick(object sender, EventArgs e)
            {
                timer1.Stop();
                MessageBox.Show("1111111");
                SetLabelText st = new SetLabelText(zhuangHua);
                _thread = new Thread(new ParameterizedThreadStart(st));
                _thread.IsBackground = true;
                _thread.Start();            
            }
            private void zhuangHua(object canshu)
            {
                 string str = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f";
                string[] strs = str.Split(',');
                string str1 = "L00";
                string str2 = "R00000000";
                string str3 = "C00000000";            string[] folders = Directory.GetDirectories(@textBox1.Text);
                for (int i = 0; i < folders.Length; i++)
                {
                    this.Invoke((EventHandler)(delegate//线程间操作无效: 从不是创建控件“listBox1”的线程访问它
                    {
                        listBox1.Items.Add("级别" + i);
                    }));
      
                    //listBox1.Items.Add("级别" + i);
                    string pathUrlone = textBox2.Text + "\\" + i;
                    if (!Directory.Exists(pathUrlone))     //保证不重复 
                    {
                        Directory.CreateDirectory(pathUrlone);
                    }
                    //listBox1.Items.Add(pathUrlone);
                    string[] folders1 = Directory.GetDirectories(folders[i]);
                    int j = 0;
                    foreach (string s in folders1)
                    {
                        string[] files = Directory.GetFiles(s);//读取文件Convert.ToInt32("CC", 16)Convert.ToString(29, 16)
                        try
                        {
                            if (Convert.ToInt32(s.Substring(s.LastIndexOf("R") + 1), 16) < Math.Pow(2, i))
                            {
                                string pathUrlbk = textBox2.Text + "\\" + i + "\\" + Convert.ToInt32(s.Substring(s.LastIndexOf("R") + 1), 16);
                                if (!Directory.Exists(pathUrlbk))     //保证不重复 
                                {
                                    Directory.CreateDirectory(pathUrlbk);
                                }                            //C#遍历指定文件夹中的所有文件 
                                DirectoryInfo TheFolder = new DirectoryInfo(s);
                                foreach (FileInfo NextFile in TheFolder.GetFiles())
                                {
                                    try
                                    {
                                        int aa = Convert.ToInt32(NextFile.Name.Substring(1, NextFile.Name.IndexOf(".") - 1), 16);
                                        if (Convert.ToInt32(NextFile.Name.Substring(1, NextFile.Name.IndexOf(".") - 1), 16) < Math.Pow(2, i))
                                        {
                                                string pathUrlbk1 = textBox2.Text + "\\" + Convert.ToInt32(NextFile.Name.Substring(1, NextFile.Name.IndexOf(".") - 1), 16) + "\\" + Convert.ToInt32(NextFile.Name.Substring(1, NextFile.Name.IndexOf(".") - 1), 16);
                                                string strUrl = textBox2.Text + "\\" + i + "\\" + j + "\\Tile_" + j + "_" + Convert.ToInt32(NextFile.Name.Substring(1, NextFile.Name.IndexOf(".") - 1), 16) + ".JPG";
                                                //File.Delete(strUrl);
                                                File.Copy(NextFile.FullName,strUrl);
                                                // listBox1.Items.Add(Convert.ToInt32(NextFile.Name.Substring(1, NextFile.Name.IndexOf(".") - 1), 16));
                                                this.Invoke((EventHandler)(delegate
                                                {
                                                    listBox1.Items.Add(NextFile.FullName + " to " + strUrl);
                                                })); 
                                               
                                        }
                                    }
                                    catch
                                    {                                }
                                }
                            }
                        }
                        catch
                        {
                        }
                        j++;
                    }
                }            timer1.Start();
            }
      

  5.   

    你线程本来都可以控制时间,你为什么还要那time线程去操控另一个线程?
      

  6.   

    用线程的sleep方法是设定时间呀,但是这里就是要求要用timer来控制,怎么解决呀?
      

  7.   

    已经解决了,就是在方法里面加 this.Invoke((EventHandler)(delegate//timer控件启动线程
                {
                    timer1.Start();
                }));