gpt4 book ai didi

.net - 如何在 WinForms 应用程序中安排任务?

转载 作者:行者123 更新时间:2023-12-04 13:35:24 24 4
gpt4 key购买 nike

问题:如何在 WinForms 应用程序中安排任务?那是(a)最好的方法/.NET类/方法使用(b)如果有一个开源组件可以很好地做到这一点,那么会推荐一个。

背景:

  • Winforms 应用程序(.NET v3.5、C#、VS2008)
  • 我假设我将始终运行 winforms 应用程序,并在不使用时最小化到系统托盘
  • 想要一个简单的方法(不想进入运行 UI winforms 应用程序与之对话的单独服务等)
  • 希望能够让用户选择计划同步的频率(例如,每小时、每天 - 选择时间等)
  • 能够在调度程序触发以运行一段代码时(例如,假设它可以被包装为后台工作任务)
  • 应用程序始终运行并出现在系统托盘
  • 最佳答案

    居然有直接内置在 Windows 中的东西 那将做到这一点。它被称为 Windows 任务计划程序 !与其让 Windows 应用程序等待适当的时间运行一段代码,不如使用底层系统实用程序并将代码段存储在单独的可执行文件中运行:它是 更简单更高效 .

    我之前使用过任务计划程序来配置我的应用程序以非常具体的计划启动。从 .NET 应用程序中执行此操作的最佳方法是 使用 this handy little library .

    基本上,要完成您在问题中所述的内容,您需要制作一个提供 GUI 的 Windows 应用程序。此 GUI 应具有管理任务创建和更改的选项。任务应该启动你必须运行的代码(你应该将它存储在一个单独的可执行文件中,可能作为一个透明的 WinForms 应用程序,因此是隐藏的。)

    这是一些代码from the CodeProject article of the library itself这说明了如何创建任务:

    //Get a ScheduledTasks object for the local computer.
    ScheduledTasks st = new ScheduledTasks();

    // Create a task
    Task t;
    try {
    t = st.CreateTask("D checker");
    } catch (ArgumentException) {
    Console.WriteLine("Task name already exists");
    return;
    }

    // Fill in the program info
    t.ApplicationName = "chkdsk.exe";
    t.Parameters = "d: /f";
    t.Comment = "Checks and fixes errors on D: drive";

    // Set the account under which the task should run.
    t.SetAccountInformation(@"THEDOMAIN\TheUser", "HisPasswd");

    // Declare that the system must have been idle for ten minutes before
    // the task will start
    t.IdleWaitMinutes = 10;

    // Allow the task to run for no more than 2 hours, 30 minutes.
    t.MaxRunTime = new TimeSpan(2, 30, 0);

    // Set priority to only run when system is idle.
    t.Priority = System.Diagnostics.ProcessPriorityClass.Idle;

    // Create a trigger to start the task every Sunday at 6:30 AM.
    t.Triggers.Add(new WeeklyTrigger(6, 30, DaysOfTheWeek.Sunday));

    // Save the changes that have been made.
    t.Save();
    // Close the task to release its COM resources.
    t.Close();
    // Dispose the ScheduledTasks to release its COM resources.
    st.Dispose();

    注意: priority选项对我没有用,总是让应用程序崩溃。我建议你把它排除在外;通常,它并没有那么大的区别。

    还有更多代码示例 on the article page ,其中一些显示如何更改任务的设置,列出所有计划任务等。

    关于.net - 如何在 WinForms 应用程序中安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2489999/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com