等待计划任务完成

时间:2017-02-08 14:06:47

标签: c# winapi scheduled-tasks

我需要在远程计算机上运行Scheduled Task

现在的问题是等待完成(之后我想打开该任务创建的文件)。

不知何故Task.IsActive不可用(永远不会设置值)。

所以我提出了这种方法,但有时这种方法无法正常工作。

似乎调用Task.Run()但实际的任务尚未启动,task.GetInstances()返回0.

之后导致'FileNotFound',因为任务尚未完成任何操作。

关于如何确保在退出此方法之前启动并执行任务的任何想法?

换句话说:如何等待计划任务完成?

private async Task<bool> RunRemoteTaskAsync(string computername, string taskname)
{
    try
    {
        Status = string.Empty;
        Cursor = Cursors.Wait;

        Status = $"Starting [ {taskname} ]";

        using (Microsoft.Win32.TaskScheduler.TaskService service = new Microsoft.Win32.TaskScheduler.TaskService(computername))
        {
            //Find Task:
            Microsoft.Win32.TaskScheduler.Task task = service.FindTask(taskname);
            if (task == null)
            {
                 Status = $"Task [{taskname}] not found.";
                 Cursor = Cursors.Arrow;
                 return false;
            }
            task.Run();                                       

            //Show State on UI
            Status = $"Running task '{taskname}' on '{computername}'";

            //Wait for completion:
            Microsoft.Win32.TaskScheduler.RunningTaskCollection instances = task.GetInstances();
            while (instances.Count == 1) <-- Sucks because if more then 1 Task is running I cannot tell if its the one I started inside of this method or any other random task...
            {
                Cursor = Cursors.Wait;
                instances = task.GetInstances();
                Thread.Sleep(100);
            }

            Status = $"Task completed";
            Cursor = Cursors.Arrow;
        }
        return true;
    }
    catch (Exception ex)
    {
        Status = $"{taskname} fehlgeschlagen";
        return false;
    }
}

0 个答案:

没有答案