1

如果 Datetime 开始,我需要帮助制作一个每秒检查一次的代码。如果它已启动,它应该关闭已经运行的功能。我知道 dispatchertimer 但我希望它在后台运行线程。原因是因为我有一个媒体播放器,它一直播放到日期时间开始,导致电影每 1 秒重新启动一次。

如果你们能帮助我,我将非常感谢,有点绝望......

        Dictionary<string, string> listBox3Dict = new Dictionary<string, string>();
        private bool listbox3job()
        {
            AxWMPLib.AxWindowsMediaPlayer axWmp =
wfh.Child as AxWMPLib.AxWindowsMediaPlayer;
            DateTime? start = DateTimePicker1.Value;
            DateTime? end = DateTimePicker2.Value; // This. End date. If end date. Stop movie.
            DateTime now = DateTime.Now;

            if (start == null || end == null)
            {
            }
            else if (now >= start.Value && now <= end.Value)
                {
                    foreach (var selected in listBox3.Items)
                    {
                        string s = selected.ToString();

                        if (listBox3Dict.ContainsKey(s))
                        {
                            axWmp.URL = (listBox3Dict[s]);
                        }
                    }

                return true;
            }
            return false;
        }
4

1 回答 1

3

好吧,根据我的更好判断,我将为您提供一个解决方案,让您每秒检查一次值。我提供此解决方案的唯一原因是该AxWindowsMediaPlayer对象没有在播放发生时触发的事件。您将需要构建一个BackgroundWorker来执行此操作:

var worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;

worker.DoWork += (s, e) =>
{
    // here you will check the time
    while (end > DateTime.Now)
    {
        Thread.Sleep(1000);
    }
}

当你准备好使用时,BackgroundWorker你会发出这个:

worker.RunWorkerAsync();

但是,我正在做出一些假设,因为您确实没有为您的问题付出足够的努力。我假设您要检查结束时间,DateTime.Now因为您声明了所有这些变量。我今天在这里也看到了一个类似的问题 - 执行几乎相同的操作。我做出这种假设的另一个原因是因为您使用的控件并没有真正为您提供确定媒体文件当前播放位置的良好机制。

今后,请在您的问题上投入更多的精力。请记住,我们对您在做什么一无所知,因此很难在没有任何上下文的情况下提供解决方案。我知道您可能很忙,并且您感觉自己处于紧缩状态,但是向我们提供的信息很少甚至没有,并不会加快流程 - 正如您从评论线程中看到的那样。

于 2013-04-17T20:18:23.117 回答