![]() |
1
22
当我有这样的东西时,我通常用
|
![]() |
2
2
自己实施是唯一安全的选择。即使您找到了一种方法来查明线程是否正在休眠,但如果您试图终止线程,您仍然会有一个争用条件(因为它可能会在检查之后和终止线程之前开始处理)。 代替thread.sleep,你可以睡500毫秒,在30分钟前检查abort标志是否仍然是假的,再睡500毫秒等,然后再做这个工作,等等(这是一个实用的方法)。如果您想要更优雅的东西,可以使用带有超时的manualResetevent来等待主线程发出终止时间的信号。 |
![]() |
3
2
哇,每个人都让事情变得如此复杂。使用计时器: 关于种族: 原来的岗位有一场比赛,已经被修正。据我所知,将服务置于停止状态不会中止用于服务计时器的线程池线程。定时器触发和服务同时停止的情况是无关的。actualWorkDoneHere()将运行或不运行。两者都是可接受的条件。
|
![]() |
4
1
这是一种方法。将以下变量添加到类中:
然后在OnStart中,您可以这样做(我有一个helper方法,它在这个示例中进行一些日志记录,“run”方法完成实际工作):
执行线程工作的“run”方法如下(processInterval是两次运行之间等待的时间,可以在构造函数中设置它,也可以对其进行硬编码):
然后在OnStop中,您将执行以下操作:
|
![]() |
5
1
您可以使用一个锁对象来防止线程在您的工作实际发生时被停止…
但是你应该小心-如果你的
|
![]() |
6
0
尝试使用自动设置标志来处理服务的停止。在这种情况下,您不必执行线程中止。已在下面添加示例代码
干杯, 巴拉斯。 |
![]() |
7
0
我的服务在网络套接字上监听,所以我所做的是创建一对连接的网络套接字,并使用SELECT系统调用来侦听这两个网络套接字。如果加入的一对报告准备好阅读,我就知道要关闭服务。 这个技巧可以用来触发任意数量的线程关闭,只要它们没有从连接的对中读取。 |
![]() |
8
0
请在里面试试这个
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 8 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 8 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 8 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 8 月前 |