当前位置:编程学习 > C#/ASP.NET >>

高手们:急急急急急急急急!!!!!!!!!!!!!!!!!!!!!请问 放在Form_Load里面的后台线程启动问题。

您好!
               求助各位大侠!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        放在load里面不能在时间到了之后播放音乐。但是如果放在控件里面激发的话,可以按时播放音乐。

        出现这个情况好几周了! 不知道怎么解决,麻烦老师了啊!

 private void Form1_Load(object sender, EventArgs e)
        {
            //隐藏系统托盘的图标
            this.notifyIcon1.Visible = false;
            this.ShowInTaskbar = true;
            // TODO: 这行代码将数据加载到表“masterDataSet.memotable”中。
            this.memotableTableAdapter.Fill(this.masterDataSet.memotable); 
            //调用后台线程
            backgroundWorker1.RunWorkerAsync();            
        }

//时间变量
        DateTime nowSystemtime1;

System.Timers.Timer Timers_Timer = new System.Timers.Timer();

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {

DateTime tempTime = new DateTime();//申明时间变量
            //连接数据库
            SqlConnection conn = new SqlConnection(@"Data Source=ADMIN\SQLEXPRESS;
        Initial Catalog=master;Integrated Security=True");
            conn.Open();//打开连接
            SqlCommand cmd = conn.CreateCommand();
            cmd.Connection = conn;
            nowSystemtime1 = DateTime.Now;
            cmd.CommandText = "select MIN(Time) as tempTime from memotable where Time >= @nowSystemtime1";
            cmd.Parameters.AddWithValue("@nowSystemtime1", nowSystemtime1);
            tempTime = (DateTime)cmd.ExecuteScalar();//将从数据库中查出的最小时间转变为tempTime            

            tempTime = Convert.ToDateTime(cmd.ExecuteScalar());//将从数据库中查出的最小时间转变为tempTime
            TimeSpan aaaa = tempTime - nowSystemtime1;
            //timer11 = new System.Threading.Timer(ElaspedJJ,null,0,aaaa);
            Timers_Timer.Elapsed += new System.Timers.ElapsedEventHandler(Timers_Timer_Elapsed);
            Timers_Timer.Interval = aaaa.TotalMilliseconds;//总得分钟数
            //如果为假只循环一次
            Timers_Timer.Enabled = true;//判断是否运行System.Timers.Timer.Elapsed事件
            
            conn.Close();//关闭连接
            GC.KeepAlive(Timers_Timer);

  }

//函数定义
        void Timers_Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                try
                {
                    Timers_Timer.Enabled = false;
                    
                    axWindowsMediaPlayer1.URL = aaa.FileName;
                    //MessageBox.Show("时间到了");//这句可以执行,我想可能就是axWindowsMediaPlayer1这个问题。不知道如何解决,我尝试着在FORM1里面用代码实例化它,也没有得到想要的结果。

                    axWindowsMediaPlayer1.settings.autoStart = true;
                  }
                catch
                {
                }
            
            }

//放在控件里面激发

        private void button2_Click(object sender, EventArgs e)
        {
            //测试
            backgroundWorker1.RunWorkerAsync();
        }

回复 --------------------编程问答--------------------
  问题说明:
             主要是由于下面这段代码不能执行。 放不出来歌。           代码有点长 请高手看看   非常感谢!!!!!!


 axWindowsMediaPlayer1.URL = aaa.FileName; 
                    //MessageBox.Show("时间到了");//这句可以执行,我想可能就是axWindowsMediaPlayer1这个问题。不知道如何解决,我尝试着在FORM1里面用代码实例化它,也没有得到想要的结果。  --------------------编程问答-------------------- 帮顶了,学习 --------------------编程问答-------------------- 放在load里当然不行,窗体加载到内存后就不再执行,要定时播放,当然是加一个定时器 --------------------编程问答-------------------- 代码没怎么看,不过可以肯定的说,你在用线程操作控件的时候会出现问题的,这个是线程的安全问题,你可以到网上搜一下 --------------------编程问答-------------------- 您好! 首先 谢谢您的答复!!!
   
     我是把后台线程的激发函数放在load里面的,线程的具体代码还是放在外面写的。
 这样也不行?
   
   麻烦看下程序   真的很急!!!
谢谢 --------------------编程问答--------------------
引用 3 楼 tannoliu 的回复:
放在load里当然不行,窗体加载到内存后就不再执行,要定时播放,当然是加一个定时器


您好! 首先 谢谢您的答复!!! 
  
    我是把后台线程的激发函数放在load里面的,线程的具体代码还是放在外面写的。 
这样也不行? 
  
  麻烦看下程序  真的很急!!! 
谢谢 --------------------编程问答-------------------- 您好! 首先 谢谢您的答复!!! 
       我这里确实用后台线程来操作了一个axWindowsMediaPlayer1 控件。
        如果不这样做 怎么实现功能呢? 您能建议下吗?
   谢谢!!!!!!!!!!!!!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,