【问题标题】:Which is the best way to call multiple method repeatedly in c# timer or thread?在 c# 计时器或线程中重复调用多个方法的最佳方法是什么?
【发布时间】:2016-09-29 06:58:36
【问题描述】:

主题:

for (; ; )
{
    Thread newThread = new Thread(MainWindow.LumEnergyInformation);
    newThread.Start();
    InitializeComponent();
}

计时器:

Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(LumEnergyInformation);
myTimer.Interval = 10000; // in milliseconds
/myTimer.Start();

【问题讨论】:

  • 当然这很大程度上取决于你的方法是什么?如果它需要很长时间并且您只是一遍又一遍地需要它,或者它很快并且您想要它 x 秒还是?什么?
  • 在 x(60) 秒内以及如何在计时器中实现多个方法

标签: c# multithreading timer


【解决方案1】:

在这两种情况下,线程或计时器,您的方法只会在不同的线程中执行,与其他线程并行。

主要区别在于:

  • 线程将为任务使用专用线程
  • 计时器将使用从线程池中获取的线程,并且该线程仅在方法运行时才会用于任务。在一个间隔和下一个间隔之间,其他人可以使用同一线程。

因此,一切都取决于您的用例:如果您的应用程序使用大量线程,Timer 可能会更高效。如果您正在调用的方法花费大量时间,那么使用 Timer 而不是 Thread 将没有任何好处,因为线程不会被回收。

【讨论】:

    【解决方案2】:

    问题应该是 - 如果使用方法是线程安全的,那么选择 Timer 或 Thread 是什么。因为这是最重要的考虑。那么你的方法是否需要它自己关注之外的任何东西?它需要使用大量数据(在许多对象的意义上)还是只需要一个?

    第二个重要的问题是,如果没有方法的结果,主要内容可以运行吗?

    如果您可以用“是”回答这两个问题,那么请直接使用线程。如果不是,请尝试使用“是”来评估回答这两个问题所需的工作量并转到线程。

    线程与计时器的原因

    计时器主要只是一个巨大的事件结构。 Timer.Tick 是事件驱动的, Timer.End 是事件驱动的,依此类推。一切都通过基于操作系统的控制。此外,如果计时器想要执行它,您的主应用程序必须暂停并执行代码。

    因此,如果您的代码是 100% 独立的或线程安全的 ==> 使用线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多