Tag: multithreading

以编程方式限制在服务内运行的线程的CPU使用率

我正在使用VB9(VS2008)。 我已经创建了一个定期为某些文件夹编制索引的Windows服务。 有没有办法可以根据当前系统状态对CPU使用率设置上限,即,如果系统处于空闲状态,则线程可以根据需要使用CPU,但是如果有其他程序/进程正在运行那么它应该以不会使系统变慢的方式使用CPU。

如何在同一时间每天一次在c#服务中执行代码?

所以这就是我的问题,我需要在每天凌晨3点在ftp上获取文件的服务器上运行ac#service。 我认为我可以使用thread.sleep()或者将DateTime.Now与凌晨3点进行比较…. 你有更好的解决方案吗? 非常感谢您的帮助!

在WPF中捕获子线程中的未处理exception

我有一个WPF应用程序,可以旋转多个线程。 我在App.xaml.cs中定义了一个DispatcherUnhandledException事件处理程序,它显示详细的错误消息,每次UI线程遇到exception时都会调用此处理程序。 问题在于子线程:它们未处理的exception永远不会得到处理。 我该怎么做呢? 示例代码: private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { MessageBox.Show(“detailed error message”); } private void Application_Startup(object sender, StartupEventArgs e) { //… //If an Exception is thrown here, it is handled //… Thread[] threads = new Thread[numThreads]; for(int i = 0; i < numThreads; i++) { threads[i] = new Thread(doWork); threads[i].Start(); } } […]

侦听COM端口时跨线程操作无效

可能重复: 使跨线程操作无效 跨线程操作无效 我正在尝试侦听COM端口,以便为SerialPort.DataReceived事件创建新的处理程序。 逻辑很简单 – 我写了一些东西给TextBox1,按下Button1,我的文本应该在Label1中显示它自己。 但我的应用程序不想运行,因为它抛出“交叉线程操作无效”错误。 我做了一些搜索并找到了Invoke对象 – 我如何在我的例子中使用它? 为什么我需要包含Invoke逻辑? namespace WindowsApplication1 { public partial class Form1 : Form { SerialPort sp = new SerialPort(); public Form1() { InitializeComponent(); sp.DataReceived += MyDataReceivedHandler; } private void Form1_Load(object sender, EventArgs e) { } private void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { try { //sp.PortName = “COM3”; […]

我们是否需要在使用后在C#中处置或终止线程?

我有以下代码: public static void Send(this MailMessage email) { if (!isInitialized) Initialize(false); //smtpClient.SendAsync(email, “”); email.IsBodyHtml = true; Thread mailThread = new Thread(new ParameterizedThreadStart( (o) => { var m = o as MailMessage; SmtpClient client= new SmtpClient(“smtpserveraddress”); client.Send(m); })); mailThread.Start(email); 我希望邮件发送在后台完成而不会干扰主线程。 它完蛋后我不在乎。 我是否需要以某种方式处理创建的线程( mailThread )的处理? 还是在完成工作后会自动处理? 请不要推荐SendAsync方法。 我想手动创建线程。 Mail.Send只是一个示例场景。 谢谢。

何时使用TaskCreationOptions.LongRunning?

我很想知道这一点,但从未真正找到答案。 我知道这是任务调度程序的一个提示,任务调度程序将在其中运行,并且任务调度程序可以(或现在将?)决定为该任务实例化非线程池线程。 我不知道(并且令人惊讶地在互联网上找不到)是一些“经验法则”何时将任务指定为长时间运行。 是一秒多长? 30秒? 一分钟? 5分钟? 它是否与应用程序使用的任务量有关系? 作为程序员,我应该使用线程池中的#threads进行一些计算,我创建了多少个任务,同时长时间运行了多少个任务,并根据这个来决定是否使用长时间运行的任务? 希望在这里学点东西。

线程的等待/异步有多么不同?

我正在尝试熟悉c#的新await / async关键字,我发现了几个我无法理解的方面。 让我们从竞争条件开始: Stream s=… … for(int i=0;i<100;i++) { s.WriteAsync(new byte[]{i},0,1); } 这将按预期工作(例如写入文件12345 …..而不是13254或其他东西)? 第二件事是异步函数如果不包含await运算符则同步执行。 而且,根据microsoft文档,异步函数总是在调用者线程中执行(与BeginInvoke相比)。 这带来了3个下一个问题: 异步函数在释放给调用函数之前执行了多少? async void MyAsyncFunction() { Operation1(); Operation2(); Operation3(); …. Stream s=…; await s.WriteAsync(….); } 在我读过的关于await / async的文章中,有人说没有等待操作符的异步函数按顺序执行,并且async / await立即返回。 但是我在唠叨MyAsyncFunction可能总是在释放之前执行Operation1 … Operation3,因为它命中了await s.WriteAsync 。 如果我在异步函数中使用Thread.Sleep ,如下所示: async void DoStuff() { Stream s=…; … await s.WriteAsync(….); Thread.Sleep(10000); …. […]

在ASP.Net站点中使用AJAX调用时,REST WCF服务会锁定线程

我在ASP.Net站点中使用AJAX在页面中使用了WCF REST服务。 我希望能够从我的服务异步调用方法,这意味着我将在我的javascript代码中使用回调处理程序,并且当方法完成时,输出将被更新。 这些方法应该在不同的线程中运行,因为每个方法都需要不同的时间来完成它们的任务 我有代码半工作,但有些奇怪的事情正在发生,因为我第一次在编译后执行代码,它工作 , 在不同的线程中运行每个调用但后续调用blocs服务,以这种方式,每个方法调用具有等到最后一次通话结束才能执行下一次通话。 他们正在同一个线程上运行。 我在使用页面方法之前遇到了同样的问题,我通过禁用页面中的会话解决了这个问题,但我还没想到在使用WCF REST服务时如何做同样的事情 注意:方法完成时间(运行它们异步应该只需要7秒 ,结果应该是: Execute1 – Execute3 – Execute2 ) Execute1 – > 2秒 Execute2 – > 7秒 Execute3 – > 4秒 输出编译后 输出后续调用(这是问题) 我会发布代码……我会尽量简化它 服务合约 [ServiceContract( SessionMode = SessionMode.NotAllowed )] public interface IMyService { // I have other 3 methods like these: Execute2 and Execute3 [OperationContract] […]

如何暂停/恢复一个post

如何暂停/恢复线程? 一旦我Join()一个线程,我就无法重启它。 那么,每当按下按钮“暂停”时,如何启动一个线程并使其暂停,并在按下恢复按钮时恢复它? 这个线程唯一能做的就是在标签控件中显示一些随机文本。

同步计时器以防止重叠

我正在编写一个Windows服务,每隔一段时间运行一次可变长度的活动(数据库扫描和更新)。 我需要经常运行此任务,但要处理的代码并不是可以安全地同时运行多次。 我怎样才能最简单地设置一个计时器来每30秒运行一次任务,而不会重复执行? (我假设System.Threading.Timer是这项工作的正确计时器,但可能是错误的)。