【问题标题】:How do you check if DateTime is initialized?如何检查 DateTime 是否已初始化?
【发布时间】:2013-04-17 19:54:15
【问题描述】:

如果 Datetime 启动,我需要帮助编写一个每秒检查一次的代码。 如果它已启动,它应该关闭已经运行的功能。 我知道 dispatchertimer 但我希望它在后台运行线程。 原因是我有一个媒体播放器会一直播放到 datetime 开始,导致电影每 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;
        }

【问题讨论】:

  • if Datetime is started,这到底是什么意思?
  • 在后台生成线程和循环...
  • DateTime 是一个函数。我指定 DateTime 从下午 2 点开始并做一些事情。
  • @MichaelPerrenoud 如果时间没有停止,你就会知道这个问题的答案。
  • “我可以给你举个例子” -> “我想我会努力帮助你解决我的问题”

标签: c# windows multithreading datetime timer


【解决方案1】:

好的,根据我的更好判断,我将为您提供一个解决方案,让您每秒检查一次值。 我提供此解决方案的唯一原因是因为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 检查结束时间,因为您声明了所有这些变量。我今天在这里也看到了一个类似的问题 - 执行几乎相同的操作。我做出这种假设的另一个原因是因为您使用的控件并没有真正为您提供确定媒体文件当前播放位置的良好机制。

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

【讨论】:

  • 感谢您帮助我。由于时间有限,心情很差,很抱歉。
  • @Sneakybastardd,不用担心。我们都去过那里。我只是想帮助您了解我们的出发点。
  • 您没有为此使用计时器而不是睡眠线程的任何特殊原因?
  • @Jim,很好的问题,我不得不说我显然可以使用那个实现。我认为在这种情况下,我会默认使用它。感谢您的指导!
猜你喜欢
  • 2017-06-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2015-05-23
相关资源
最近更新 更多