Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调度员没有';我不能在控制台工作_C#_Timer_Dispatchertimer - Fatal编程技术网

C# 调度员没有';我不能在控制台工作

C# 调度员没有';我不能在控制台工作,c#,timer,dispatchertimer,C#,Timer,Dispatchertimer,我很好奇为什么调度程序计时器在控制台模式下不工作。我创建了一个简单的闹钟,当定时器达到它的极限时,它会做一些事情 您可以在UnitTest或控制台模式下使用调度程序计时器吗? DailyAlarm在我以某种形式运行时起作用 这是我调用计时器的代码 [TestClass] public class UnitTest1 { bool runTest = true; [TestMethod] public void TestDailyAlarm() {

我很好奇为什么调度程序计时器在控制台模式下不工作。我创建了一个简单的闹钟,当定时器达到它的极限时,它会做一些事情

您可以在UnitTest或控制台模式下使用调度程序计时器吗? DailyAlarm在我以某种形式运行时起作用

这是我调用计时器的代码

[TestClass]
public class UnitTest1
{
    bool runTest = true;
    [TestMethod]
    public void TestDailyAlarm()
    {
        DateTime alarmTime = new DateTime();
        alarmTime= DateTime.Now;
        alarmTime = alarmTime.AddSeconds(5);

        // MessageBox.Show(alarmTime.ToString());

        DailyAlarm alarm = new DailyAlarm(alarmTime);
        alarm.DailyAlarmEvent += alarm_DailyAlarmEvent;
        alarm.Start();
        while (runTest)
        {
            System.Threading.Thread.Sleep(1000);
        }
    }

    void alarm_DailyAlarmEvent(EventArgs e)
    {            
        MessageBox.Show("Alarm On");
        runTest = false;
    }
}
这是我的计时器代码

public class DailyAlarm
{
    #region Timer
    DispatcherTimer timer;
    #endregion

    #region AlarmTime
    DateTime _alarmTime;
    #endregion

    #region Event
    public delegate void DailyAlarmHandler(EventArgs e);
    public event DailyAlarmHandler DailyAlarmEvent;
    #endregion
    public DailyAlarm(System.DateTime alarmTime)
    {
        if (alarmTime < DateTime.Now)
        {
            alarmTime = alarmTime.AddDays(1);
        }
         _alarmTime = alarmTime;
         TimeSpan timeRemaining = alarmTime.Subtract(DateTime.Now);
        timer = new DispatcherTimer();
        timer.Tick += AlarmEvent;
        timer.Interval = timeRemaining;

    }

    public void Start()
    {
        timer.Start();
    }

    private void AlarmEvent(object sender, EventArgs e)
    {
        DailyAlarmEvent(null); 
        // Calculate next Alarm 
        _alarmTime = _alarmTime.AddDays(1);
        TimeSpan timeRemaining = _alarmTime.Subtract(DateTime.Now);
        Utilities.DispatcherTimer_ChangeInterval(ref timer, timeRemaining);           
    }

    public void Stop()
    {
        if (timer != null)
            timer.Stop();
    }
}
公共类日报
{
#区域计时器
调度定时器;
#端区
#区域报警时间
DateTime _alarmTime;
#端区
#区域事件
公共代表无效的Dailyalmhandler(事件参数e);
公共活动Dailyalmhandler Dailyalmevent;
#端区
公共每日报警(System.DateTime alarmTime)
{
如果(alarmTime
Dispatchermer在UI线程上触发其勾号事件。您正在控制台模式下运行代码。我想这就是答案

默认情况下,控制台和单元测试环境没有运行调度程序计时器的调度程序

您仍然可以使用Dispatcher.CurrentDispatcher创建一个Dispatcher来运行代码

这里有一个关于它的用法的例子

使用此DispatcherHelper,您可以使用以下工具测试代码:

    [TestMethod]
    public void TestMethod1()
    {
        Action test = () =>
            {
                var dailyAlarm = new DailyAlarm(DateTime.Now.AddSeconds(5.0));
                dailyAlarm.DailyAlarmEvent += dailyAlarm_DailyAlarmEvent;
                dailyAlarm.Start();
            };

        DispatcherHelper.ExecuteOnDispatcherThread(test, 20);
    }

    void dailyAlarm_DailyAlarmEvent(EventArgs e)
    {
        // event invoked when DispatcherTimer expires
    }

如果没有
调度员
,您希望
调度员如何工作?只需使用另一个可用的
计时器
s。您所指的链接现在已失效。这是在回程机器中: