如果启动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;
}
答案 0 :(得分: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
的结束时间,因为您声明了所有这些变量。我今天在这里也看到了类似的问题 - 执行几乎相同的操作。我做出这个假设的另一个原因是因为您使用的控件并没有真正为您提供确定媒体文件当前播放位置的良好机制。
将来,请在您的问题上投入更多精力。请记住,我们知道没有关于您正在做什么,因此在没有任何背景情况下验证很难提供解决方案。我知道你可能很忙,而且你觉得自己处于紧张状态,但是向我们提供的信息很少甚至没有提高我们的流程 - 正如你从评论中看到的那样线程。