Bits & Bytes

Posts Tagged ‘program’

How to Schedule and Delete a Task

If you have any problems following these instructions, please consult our video on the subject. We begin by opening the Task Scheduler program. There are two ways to do this:

  1. Click the Start Button
    1. Click “Windows Administrative Tools” in the Start menu to open its submenu
    2. Right-click “Task Scheduler” open the context menu and click “Run as administrator”
  2. Enter “Task Scheduler” into the search box next to the start button
    1. Click “Run as administrator” in the pop up dialog

With either method, you should now have the Task Scheduler open and looking like:

To create the new task, click “Action” in the menubar and “Create Basic Task…” in the submenu.

This will open the “Create Basic Task Wizard” shown below. Since we are going to create a task to open the command prompt, we entered “Command Prompt” in the Name: box and “Open a command prompt” in the Description: box. However, you should use whatever name and description are appropriate for your task.

Since we want to create a task to run a program every day, just click the “Next” button four times until we get to the “Start a Program” screen.

At this point, we can enter the file path to our application in Program/script: box or click the “Browse…” button to select the application program. Since we are going to use the command prompt program, our Program/script: is cmd.exe as shown below.

We can finish creating the task by clicking the “Finish” button. To see the task, you might need to click “Task Scheduler Library” as shown.

Now, we can right-click the new task in the list to show the context menu above. This allows us to “Run” or “Delete” the task as we so choose. Selecting “Run” will run the application and selecting “Delete” will take us through a confirmation dialog and then remove the task.

Creating Multicast Delegates in C#

As stated in my prior post on C# delegates, a C# delegate is similar to a function pointer in C++. There, I gave a couple of examples of how to use delegates and said that I would cover multicast delagates later.

So, what is a multicast delegate? A multicast delegate is a function pointer that can be set to point to multiple functions at the same time. It calls each of them in order when it is called. Since a function can only return one value, multicast delegates must return a void type; that is, they must not have a return type.

The program below demonstrates how to use a multicast delegate. First, the delegate type DPrintMultipleOfNumber is declared. Then, inside the Main() function, we declare an instance of the delegate called pfnMulticast and initialize it with function OneTimes() that is defined below the Main() function. The next two lines add the functions TwoTimes() and ThreeTimes() to it via the =+ operator. Finally, we call all three of the functions via the delegate with the argument 13.

The output of the program looks like this:

UsingMulticast

Program.cs

using System;

namespace UsingMulticastDelegates {
    class Program {

        delegate void DPrintMultipleOfNumber(double dX);

        static void Main(string[] args) {
            DPrintMultipleOfNumber pfnMulticast = OneTimes;
            pfnMulticast += TwoTimes;
            pfnMulticast += ThreeTimes;
            pfnMulticast(13);
        }

        static void OneTimes(double dX) {
            Console.WriteLine("One times {0} is {1}", dX, dX);
        }

        static void TwoTimes(double dX) {
            Console.WriteLine("Two times {0} is {1}", dX, 2.0*dX);
        }

        static void ThreeTimes(double dX) {
            Console.WriteLine("Three times {0} is {1}", dX, 3.0*dX);
        }
    }
}

Creating Timer Events in C#

If you want something to happen in a C# program at regular time intervals, the ideal way is to create a callback function that makes use of the Timer class. Below, I have created a class called CTimedObject that holds a Timer object. In the constructor, the Timer is allocated with a time interval of 2000 milliseconds or 2 seconds. Then OnTimedEvent() is set as a callback using the += operator and the Elapsed property. Finally, The Timer is started via a call to Start().

At this point, OnTimedEvent() will be called every 2 seconds. Inside the OnTimedEvent() function, the time is written to the console window via the passed in event object of type ElapsedEventArgs. The Object that is passed in is the Timer. Executing the program, the output looks like this

TimerEvent

Program.cs

using System;
using System.Timers;

namespace UsingTimers {
    class Program {
        static void Main(string[] args) {
            CTimedObject qTimedObject = new CTimedObject();
            Console.WriteLine("Press the Enter key to exit the program... ");
            Console.ReadLine();
        }
    }
}

CTimedObject.cs

using System;
using System.Timers;

namespace UsingTimers {
    class Program {
        static void Main(string[] args) {
            Timer qTimer = new Timer(2000);
            qTimer.Elapsed += OnTimedEvent;
            qTimer.Start();
            Console.WriteLine("Press the Enter key to exit the program... ");
            Console.ReadLine();
        }

        static private void OnTimedEvent(Object qTimer, ElapsedEventArgs eElapsed) {
            Console.WriteLine(eElapsed.SignalTime);
        }
    }
}

The code above demonstrates how to use a Timer in an object. Alternatively, we could do the same thing more simply if we just want the event to fire with a static function. Below, we have code that does exacly the same thing without using a separate class.

Program.cs

using System;
using System.Timers;

namespace UsingTimers {
    public class CTimedObject {

        Timer mqTimer = null;

        public CTimedObject() {
            mqTimer = new Timer(2000);
            mqTimer.Elapsed += OnTimedEvent;
            mqTimer.Start();
        }

        private void OnTimedEvent(Object qTimer, ElapsedEventArgs eElapsed) {
            Console.WriteLine(eElapsed.SignalTime);
        }
    }
}