Запуск программ по расписанию через waitable timer C#

365
07 марта 2017, 13:10

Я пишу курсовую запуск программ по расписанию на C#, тип проекта Windows Forms. Преподаватель сказал реализовать через waitable timer. Вот мой код :

private void Form1_Load(object sender, EventArgs e)
{
    string date, time, datenow = DateTime.Now.ToShortDateString(), timenow = DateTime.Now.ToShortTimeString(), way;
    // MessageBox.Show(DateTime.Now.ToShortTimeString());
    // MessageBox.Show(timenow);
    Process p = new Process();
    using (StreamReader fs = new StreamReader(@"C:\Users\Master\Documents\Visual Studio 2013\Projects\Cursovaya OS 1\Cursovaya OS 1\bin\Debug\datetime"))
    {
        while (!fs.EndOfStream)
        {
             // Читаем строку из файла во временную переменную.
             date = fs.ReadLine();
             //time = fs.ReadLine();
             way = fs.ReadLine();
             p.StartInfo.FileName = way;
             DateTime utc;
             utc=Convert.ToDateTime(date);
             // MessageBox.Show(utc.ToString());
             long duetime = utc.ToFileTime();
             handle = CreateWaitableTimer(IntPtr.Zero, true, "WaitableTimer");
             SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true);
             uint INFINITE = 0xFFFFFFFF;
             int ret = WaitForSingleObject(handle, INFINITE);
             p.Start(); 
        }

Но процесс не запускается. Формат файла где находится дата и время, а также путь к файлу:

08.03.2017 9:20
D:\Des1.txt

Помогите пожалуйста разобраться в проблеме.

Answer 1

Скопировав твой код у меня переменная way равна null. Сделать по своему все работает. Создай пустой класс TimerAPCProc, чтобы ошибки не было. Надеюсь помог.

[DllImport( "kernel32.dll" )]
    public static extern IntPtr CreateWaitableTimer( IntPtr lpTimerAttributes, bool bManualReset,
                     string lpTimerName );

    [DllImport( "kernel32.dll" )]
    public static extern bool SetWaitableTimer( IntPtr hTimer, [In] ref long pDueTime,
                    int lPeriod, TimerAPCProc pfnCompletionRoutine,
                    IntPtr lpArgToCompletionRoutine, bool fResume );
    [DllImport( "kernel32.dll", SetLastError = true, ExactSpelling = true )]
    public static extern Int32 WaitForSingleObject( IntPtr handle, int milliseconds );
    private IntPtr handle;

    private void Form1_Load( object sender, EventArgs e )
    {
        string date, time, datenow = DateTime.Now.ToShortDateString(), timenow = DateTime.Now.ToShortTimeString(), way;
        // MessageBox.Show(DateTime.Now.ToShortTimeString());
        // MessageBox.Show(timenow);
        Process p = new Process();
        using ( StreamReader fs = new StreamReader( @"C:\Users\Admin\Documents\1\Del1" ) )
        {
            while ( !fs.EndOfStream )
            {
                // Читаем строку из файла во временную переменную.
                date = fs.ReadLine();
                //time = fs.ReadLine();
                way = fs.ReadLine();
                p.StartInfo.FileName = way;
                DateTime utc;
                utc = Convert.ToDateTime( date );
                // MessageBox.Show(utc.ToString());
                long duetime = utc.ToFileTime();
                handle = CreateWaitableTimer( IntPtr.Zero, true, "WaitableTimer" );
                SetWaitableTimer( handle, ref duetime, 0, null, IntPtr.Zero, true );
                uint INFINITE = 0xFFFFFFFF;
                int ret = WaitForSingleObject( handle, (int)INFINITE );
                p.Start();
            }
        }
    }
READ ALSO
Какие ошибки не видит компилятор, но видит run-time?

Какие ошибки не видит компилятор, но видит run-time?

Проходил онлайн-собеседование и был предложен тест:

287
Как избежать ошибки PathTooLongException?

Как избежать ошибки PathTooLongException?

Имеется программа обрабатывающая различные файловые пути (напр: C:\Users\J

298
Определить язык произвольной строки

Определить язык произвольной строки

Из вне приходит произвольная строка и нужно определить ее язык

355
Добавление выбранной пользователем ватермарки на выбранную им же картинку?

Добавление выбранной пользователем ватермарки на выбранную им же картинку?

Суть проста В picturebox загружается картинка, потом по нажатию кнопки добавляется ватермарка НО! Сейчас добавляется только указанная в пути...

223