private void RingBeingready(object threadNum) { //开始响铃 RingClockSet.Beep(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("wav\\第{0}测试.wav", ((int)threadNum) % 6).ToString())); m_SynContext.Post(SetRichTextSafePost, threadNum); Thread.Sleep(1000); //MessageBox.Show(string.Format("线程{0}在{1}执行\n", threadNum, DateTime.Now.ToStandardTimeStr())); RingClockSet.StopBeep(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("wav\\第{0}测试.wav", ((int)threadNum) % 6).ToString())); //FileHelper.appendToFile("记录时间" + DateTime.Now.ToStandardTimeStr(), AppDomain.CurrentDomain.BaseDirectory + "\\temp.txt"); }
private void btnStopClock_Click(object sender, EventArgs e) { RingClockSet.StopBeep(AppDomain.CurrentDomain.BaseDirectory + "\\wav\\beep.wav"); }
private void ClockRing(object obj) { try { ControledClock clk = obj as ControledClock; #region 把要使用的变量都用新的内存保存起来 DateTime ringTime = new DateTime(); string ID = ""; string taskContent = ""; int interval = 0; string excuteId = clk.ExcuteId; ringTime = clk.RingTime; ID = clk.ID; taskContent = clk.TaskContent; interval = clk.Interval; //LogTextHelper.WriteLine("ClockRing:\t" + JsonConvert.SerializeObject(m_RingSet.firstRingClock)); DateTime dtNow = DateTime.Now; #endregion //休眠到响铃时间 Thread.Sleep(ringTime - dtNow); //睡醒之后,如果突然发现:咦,你这闹钟变了。因为变了之后是使用另外的线程去响铃了,这线程被抛弃了。停止他 #region if (ringTime != clk.RingTime) { return; } #endregion #region 如果在响铃之前这闹钟已经被删除或被停止了,那么也没必要往下执行这线程了 bool bRingClockExist = false; foreach (ControledClock temp in listControlClock) { if (ID == temp.ID) { bRingClockExist = true; if (temp.Status == "Stop") //如果被改成暂停了也没必要往下执行 { bRingClockExist = false; } } } if (!bRingClockExist) { return; } #endregion //其实这里最好要锁住那个响铃闹钟,防止刚好响铃时,那个闹钟被更改 //开始响铃 RingClockSet.MciStartRing(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wav\\" + WavToTaskcontent.GetWavfilename(taskContent))); //闹钟依据间隔继续使用? string tips = string.Format("响铃时间:{0}\n内容:{1}\nID:{2}", ringTime.ToStandardTimeStr(), taskContent, ID); #region 继续响铃? if (DialogResult.Yes == MessageBox.Show(tips, "继续响铃?", MessageBoxButtons.YesNo)) { //修改响铃闹钟集以及控制闹钟列表 FileHelper.AddControledClockInfoToHistoryFile(clk, "响铃后继续"); //更新listBoxControledClock,新信息显示在listBox1 for (int i = 0; i < listControlClock.Count(); i++) { if (ID == listControlClock[i].ID) { listControlClock[i].RingTime = ringTime.AddSeconds(interval); //如果加上了interval,还是小于当前时间,怎么处理?? listControlClock[i].Status = "Start"; if (ringTime.AddSeconds(interval) < DateTime.Now.AddSeconds(1)) //给1秒运行时间 { MessageBox.Show("抱歉!设置的闹铃时间已过!自动为您停止!"); listControlClock[i].Status = "Stop"; m_SynContext.Post(SetListBoxSafePost, ""); RingClockSet.MciStopRing(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wav\\" + WavToTaskcontent.GetWavfilename(taskContent))); } else { m_SynContext.Post(SetListBoxSafePost, ""); RingClockSet.MciStopRing(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wav\\" + WavToTaskcontent.GetWavfilename(taskContent))); //ClockRing(listControlClock[i]); //这种方式想着不用创建线程更节省内存,但会造成MciRing函数只响上一次未响完的那一段。 BeginRingClock(listControlClock[i]); //线程中重启线程 } } } } else { //从响铃闹钟类中移除闹钟,并设置此闹钟状态为停止 FileHelper.AddControledClockInfoToHistoryFile(clk, "响铃后不继续"); //更新listBoxControledClock,新信息显示在listBox1 for (int i = 0; i < listControlClock.Count(); i++) { if (ID == listControlClock[i].ID) { listControlClock[i].Status = "Stop"; m_SynContext.Post(SetListBoxSafePost, ""); RingClockSet.MciStopRing(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "wav\\" + WavToTaskcontent.GetWavfilename(taskContent))); } } } #endregion } catch (Exception ex) { LogTextHelper.WriteLine("响铃时出现错误!ERROR:" + ex.ToString()); } }