【C# 跨线程访问控件】教程文章相关的互联网学习教程文章

c# – 线程,进程和Application.Exit()【代码】

我的应用程序包括主消息循环(GUI)和线程(Task.Factory). 在线程中,我使用var p = new Process()调用一些第三方应用程序; 但是当我调用Application.Exit()时;在消息循环中 – 我可以看到在线程中启动的进程仍在内存中并正在执行. 所以问题是 – 如何在Application.Exit()之后立即杀死所有线程和进程;已被调用? UPD: 旧:p.WaitForExit();新:while (!p.WaitForExit(1000)) {if (FlagToExit){p.Kill();return;} }解决方法:处理Appl...

c# – 使用PLINQ对线程计数的内存使用限制

我正在使用PLINQ来数据并行化操作.每个线程消耗大量内存,这些内存根据算法设置而变化,根据算法选项,没有简单的方法来预先计算需要多少内存.当内存要求较低时,最佳线程数为7,系统总数为8;当内存要求很高时,2个线程比1更显着改进,但是一旦使用3个线程,系统就会开始命中分页文件,CPU利用率下降到0,性能变差几百倍. 我希望能够做的是让PLINQ逐步增加线程数,同时监控内存负载,一旦系统耗尽可用的物理内存,在最后一个线程上设置取消令牌,...

c# – 在Windows窗体中获取多个UI线程

我正在试图找到一种方法来使用户控件在他们自己的UI线程中运行.这可能吗?我试图阻止基于模块的应用程序因单个模块而崩溃. 有什么想法吗?解决方法:那是不可能的.但是,使用一些非平凡的代码,您可以在不同的线程中运行不同的窗口.每个窗口都有自己的消息循环. 更新: 您可以想到的另一种方法是以特殊方式编写控件.您可以通过创建将运行所有逻辑的新线程来处理控件中的所有事件.

c# – 哪个更适合在Windows服务,线程或计时器中使用?

嗨,我是Windows服务的新手我使用线程开发了一个Windows服务,在OnStart()中创建新线程并使用该线程运行方法并使用睡眠线程到下一次运行时但我的一位朋友说最好使用计时器比线程所以我想知道哪个是最好的方法来做这个程序?谢谢您的帮助解决方法:根据您的评论,您的目标是按特定时间间隔运行一些代码: 从概念上讲,使用计时器比使线程睡眠更好.这就是计时器的制作方法.如果您选择线程睡眠方法,我认为在实践中它仍然会正常工作,尽管更好...

C#多线程进程中线程的局部堆【代码】

我在C#中有一个多线程进程,每个线程经常尝试从堆中分配内存.这需要多个堆锁,因此降低了线程的优势. 是否存在类似线程的本地堆,因此同时尝试从不同线程分配内存不会锁定其中一个?解决方法:根据this article,当多个线程同时分配内存时,多处理器系统中没有争用:Synchronization-free Allocations On a multiprocessor system,generation 0 of the managed heap is split into multiple memory arenasusing one arena per thread. Th...

c# – 当调用进程退出或被杀死时,如何正常结束线程?

所以我想的是一个类的实例,我想要一个线程在类的生命周期中运行,但是当调用类的进程不再运行时终止.这不是父线程终止子进程的情况,而是单个旋转(在等待循环中)线程正常退出而不保留资源等. 我认为在C中,你可以告诉线程使用析构函数中的volatile bool终止,但是在C#中,?不是析构函数,它是终结器.我无法使用终结器成功终止线程.也许我错过了一些东西.我知道更好的做法是让所有线程死于自然死亡而不发出信号终止,但每次我需要做某事时产...

c# – 线程已退出,Windows窗体中的代码为0【代码】

我在Windows窗体中退出线程时遇到问题. 我有经典的Windows窗体,它正在运行.我需要在每个时期做一些事情,所以我补充说:TimerCallback timerDelegate = new TimerCallback(this.TryDoSomething); int period = 10 * 1000; // to miliseconds System.Threading.Timer stateTimer = new System.Threading.Timer(timerDelegate, null, period, period);方法DoSomething由几个线程(主线程和这个计时器)调用,所以我这样覆盖它:private v...

c# – 使用线程时出现内存不足异常【代码】

我有以下算法,private void writetodb() {using(var reader = File.OpenRead("C:\Data.csv");using(var parser = new TextFieldParser(reader)){ //Do some opeartionswhile(!parser.EndOfData){//Do operations//Take 500 rows of data and put it in datasetThread thread = new thread(() => WriteTodb(tablename, set));thread.Start();Thread.Sleep(5000);}} }public void WriteTodb(string table, CellSet set) {//WriteToDB...

c#如何避免内存分配瓶颈以提高多线程性能

我使用C#作为研究工具,经常需要运行CPU密集型任务,例如优化.从理论上讲,我应该能够通过多线程化代码来提高性能,但实际上当我使用与工作站上可用内核数量相同的线程数时,我通常会发现CPU仍然只运行在25 %-50%的最大值中断代码以查看所有线程正在做什么强烈建议内存分配是瓶颈,因为大多数线程将等待新语句执行. 一种解决方案是尝试重新设计我的所有代码,以提高内存效率,但这将是一项庞大而耗时的任务.但是,由于我的工作站上有大量内...

c# – Python .NET,多线程和windows事件循环【代码】

我正在使用Python .NET围绕黑盒.NET DLL构建Python API. DLL只进行网络操作. DLL要求我运行一个窗口消息泵循环,否则网络操作会在一段时间后卡住.我在主线程中使用System.Windows.Forms.Application.Run()运行Windows消息循环.这适用于仅接收数据.当我开始从其他Python线程调用DLL时,我的程序开始表现得很奇怪.我认为它与线程有关,因为问题非常不规律 – 网络事件消失或进入很晚.据我所知,Python和C#是线程安全的,但也许是因为多层包...