Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c中的后台线程#_C#_Multithreading - Fatal编程技术网

C# c中的后台线程#

C# c中的后台线程#,c#,multithreading,C#,Multithreading,我目前在c#中从事线程和后台工作。我的问题是这个。假设我有一个用于用户交互的主线程和一个用于处理txt文件的工作线程(各种编辑操作)。在backgroundthread运行它的内容一次之后,我有一个计时器启动,它执行另一组操作。我想让计时器每运行x分钟的这些新操作在同一个后台线程中运行,而不运行计时器启动之前运行的与txt相关的操作。如何做到这一点?您应该只使用System.Timers.Timer,它将在线程池线程上运行回调 运行哪个特定线程并不重要(只要不是UI线程)。 如果出于某种原因,它

我目前在c#中从事线程和后台工作。我的问题是这个。假设我有一个用于用户交互的主线程和一个用于处理txt文件的工作线程(各种编辑操作)。在backgroundthread运行它的内容一次之后,我有一个计时器启动,它执行另一组操作。我想让计时器每运行x分钟的这些新操作在同一个后台线程中运行,而不运行计时器启动之前运行的与txt相关的操作。如何做到这一点?

您应该只使用
System.Timers.Timer
,它将在线程池线程上运行回调

运行哪个特定线程并不重要(只要不是UI线程)。

如果出于某种原因,它确实很重要(例如,如果您使用的是单线程COM对象),那么您需要创建一个专用线程,使用线程安全的委托队列等待处理。

您应该只使用
System.Timers.Timer
,它将在线程池线程上运行回调

运行哪个特定线程并不重要(只要不是UI线程)。

如果出于某种原因,它确实很重要(例如,如果您使用的是单线程COM对象),那么您需要创建一个专用线程,使用线程安全的委托队列等待处理。

您希望使用事件驱动方法从UI线程对工作线程执行函数调用。实现这一点的方法是使用BeginInvoke,您可以在此处阅读有关如何使用它的更多信息:

您希望使用事件驱动方法从UI线程对工作线程执行函数调用。实现这一点的方法是使用BeginInvoke,您可以在此处阅读有关如何使用它的更多信息:

在后台工作程序的末尾添加一个while循环:

而(!stop){Thread.Sleep(yourIntervalinMilliseconds);…}


我会在某个地方创建一个stop bool,当您希望它退出时,线程会查看它。

在后台工作程序的末尾添加一个while循环:

而(!stop){Thread.Sleep(yourIntervalinMilliseconds);…}


我会在某个地方创建一个stop bool,当您希望线程退出时,线程会看到它。

为什么不启动另一个线程?后台线程是在任何时候终止还是连续运行?如果它继续运行,您可以在工作线程中使用一个局部布尔变量来记住计时器操作是否已经运行。@Justin C计时器代码在timer_appeased方法中运行。如何从计时器线程调用backgroundworker1_DoWork?我添加了一种方法作为答案。BeginInvoke允许您将消息从一个线程传递到另一个线程。因此,您可以让后台线程保持运行,并在其上执行方法,而无需重新启动线程并让其再次执行计时器。为什么不启动另一个线程?后台线程是在任何时候终止还是连续运行?如果它继续运行,您可以在工作线程中使用一个局部布尔变量来记住计时器操作是否已经运行。@Justin C计时器代码在timer_appeased方法中运行。如何从计时器线程调用backgroundworker1_DoWork?我添加了一种方法作为答案。BeginInvoke允许您将消息从一个线程传递到另一个线程。因此,您可以让后台线程保持运行,并在其上执行方法,而无需重新启动线程并让其再次执行计时器。
Tick
事件将在线程池中的线程上运行,就像
BackgroundWorker
一样。(虽然不一定是同一个线程)
Tick
事件将在线程池中的线程上运行,就像
BackgroundWorker
一样。(虽然不一定是同一条线)