我需要在远程计算机上运行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;
}
}