【c# – .NET AppDomain.Unload触发失控线程】教程文章相关的互联网学习教程文章

c#同时执行2个线程【代码】

我试图在HTTP处理程序中重现线程错误条件. 基本上,ASP.net工作程序正在创建2个线程,当某个页面加载时,它会同时调用我的应用程序中的HTTP处理程序. 在http处理程序内部,是一个非线程安全的资源.因此,当2个线程同时尝试访问它时,会发生异常. 我可能会在资源周围放置一个锁定语句,但是我想确保它实际上就是这种情况.所以我想首先在控制台应用程序中创建这种情况. 但我不能像asp.net wp那样同时获得2个线程来执行一个方法.所以,我的问题...

C# 子线程与主线程通讯方法一

最近在项目中要用到子线程运行结束向主线程通知的需求,利用线程上下文来实现线程之间的同步。 子线程结束后调用同步函数,向主线程发送时间字符串,改变主窗体的label标签 label标签改变事件触发处理函数,进行显示; 代码如下: 主窗体: public static MainForm comMainForm; //其他类可以直接调用此窗体的控件public MainForm() { InitializeComponent(); comMainForm = this; }//任务...

c# – 在一个线程中引发事件以调用第二个线程中的方法【代码】

我正在开发一个程序,它可以响应来自互联网套接字的事件,也可能来自定时器.使用两个线程似乎很自然: >一个主程序>第二个侦听套接字,解析输入并引发适当的事件. 其他要求: >应用程序不应该依赖UI线程(它可以作为控制台应用程序运行).>主程序应同步处理消息,即按照它们到达的顺序.>主线程不能阻塞等待定时器(我想这意味着我必须在不同的线程上运行定时器). 现在有些问题:-): >我猜测要求#1意味着我没有内置消息泵,所以我不能使用套...

c# – 如何在多线程应用程序中使用随机类正确【代码】

我需要使用随机类在公共静态函数内的多线程应用程序中生成随机数.我怎样才能实现它.目前,下面的功能运行良好,但与随机类相比,它不是很快.因此,我需要修改下面的函数并使其与随机类一起工作,同时在该类中发生数千个并发调用.如果我使用随机它,我想每次通话使用相同的种子,随机化非常糟糕.我现在的课using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Security.Cryptography;publ...

c# – 在静态方法线程安全中使用foreach而不是HttpContext.Current吗?【代码】

记住这些 –HttpContext.Current –Foreach 我无法绕过这个问题……这个代码在ASP.NET中是“线程安全的”吗?public static bool IsCookieMissing() {foreach (string cookieKey in HttpContext.Current.Request.Cookies.AllKeys){if (cookieKey.EndsWith("cookie_name")){return false;}}return true; }解决方法:Is this code “thread safe” in ASP.NET?这取决于你期望它做什么.它最有可能做你期望做的事情,因此它是“线程安全的...

c# – 什么是锁定线程的正确方法?【代码】

在我的MVC 3 C#应用程序中,我有一些静态对象,我希望一次可用于一个请求.访问它只是通过方法,但我希望锁定在调用其方法之间. 调用只在控制器中完成,通常会有一个或两个锁定的代码块. 起初我想暴露一些静态公共对象并使用它就像lock(MyClass.lockObject) {MyClass.doStuff();MyClass.doStuff2(); },但我发现它容易出错,因为我可能会忘记把它锁在某个地方.我想知道在构造函数中使用Monitor.Enter()和在Dispose方法中使用Monitor.Exit(...

c# – winforms应用程序中的多线程【代码】

我正在编写一个win表单,使用报表查看器创建多个PDF文件.这些PDF文件分为4个主要部分,每个部分负责创建特定报告.这些进程创建的文件最少为1个,最多为用户数(目前为50个). 该程序已经存在,依次使用4种方法.为了提高用户数量的额外性能,我想在4个独立的线程中将这些方法与邮件进程分开. 虽然我是使用C#进行多线程处理的新手,但我读了很多文章如何实现这一点.我唯一不确定的是我应该从哪个方向开始.当我阅读多篇博文时,我不确定是否要使...

c# – 创建线程时出现NullReferenceException【代码】

我在创建一个简单的线程池时看到了这个thread.在那里,我遇到了@MilanGardian’s response for .NET 3.5这是优雅的,并达到了我的目的:using System; using System.Collections.Generic; using System.Threading;namespace SimpleThreadPool {public sealed class Pool : IDisposable{public Pool(int size){this._workers = new LinkedList<Thread>();for (var i = 0; i < size; ++i){var worker = new Thread(this.Worker) { Name...

c# – .NET AppDomain.Unload触发失控线程【代码】

我有一个.NET 3.5 SP1应用程序,它是一个Excel加载项.应用程序分为父AppDomain(Excel)和子域,我们在其中加载所有dll.当我们希望更新我们的应用程序时,我们卸载子域,替换文件并重新加载它. 不幸的是,卸载域将激活2个工作线程,并且它们将开始消耗CPU周期(20-40%). 如果我使用VS 2010进行调试,那么在AppDomain.Unload之前和之后,除了Excel的主线程之外,没有线程可以使用调用堆栈.确实卸载了AppDomain.Unload,因为如果我再次尝试调用Un...

c# – 当创建它的线程终止时,CLR是否释放了COM对象?

我一直无法弄清楚如何搜索这种怀疑的确认,但我看到证据表明在一个线程上创建的COM对象不再可用于其他线程(已经与其底层RCW分离的COM对象无法使用)一旦代码在创建它的线程上停止执行(并且该线程可能已终止).这是一个非常隐蔽的问题,因为我在整个代码中都调用了System.Runtime.InteropServices.Marshal.ReleaseComObject,但是我无法识别它们中的任何一个被调用导致此错误.最后我得出结论,当辅助线程停止执行时,COM对象显然被隐式释放...

告诉窗口关闭C#中的一个线程【代码】

我在WPF工作,我有一个启动监听套接字的对话窗口,并且应该在有人连接时立即关闭.这是我天真的,非工作的代码段:void acceptCallback(IAsyncResult iar) {socket = listenSocket.EndAccept(iar);DialogResult = true; // error hereClose(); }private void ValidButton_Click(object sender, RoutedEventArgs e) {IPEndPoint iep = new IPEndPoint(IPAddress.Any, port);listenSocket.Bind(iep);listenSocket.Listen(1);listenSocket...

c# – 逐个将每个列表项传递给新的线程【代码】

参见英文答案 > Captured variable in a loop in C# 8个我想要做的很简单,我扫描一个字符串列表,然后,我将每个字符串传递给一个新的线程进行打印.using System; using System.Collections.Generic; using System.Threading;namespace MultithreadingSynchronization {class Program{static void Main(string[] args){List<string> stringList = new List<string> { "server1", "server2", "ser...

c# – 对多个文件副本使用多线程【代码】

我要复制大量文件(10000个文件) 因为复制需要很长时间.我尝试使用两个线程而不是单个线程,一个用于复制列表中的奇数文件,另一个用于复制列表中的偶数 我用过这段代码:ThreadPool.QueueUserWorkItem(new WaitCallback(this.RunFileCopy),object)但是在使用单线程和使用两个线程时,时间上没有显着差异. 这可能是什么原因?解决方法:文件复制不是CPU进程,而是IO进程,因此多线程或并行性不会对您有所帮助. 多线程在几乎所有情况下都会...

c# – 当我将线程添加到集合时,TPL中的Handeling错误【代码】

我正在制作一个Producer Consumer模型,其中生成的每个项目都在新的Task Parallel Library线程上使用,并在List< Task>中进行跟踪.采集.我希望能够以及时和可预测的方式捕获任何未公开的异常.在一个循环中,我从集合中删除已完成的线程,并且正在考虑类似下面的内容,但没有在网上看到任何关于此的内容.try {Task.WaitAll(threadList.FindAll(x => x.IsFaulted).ToArray()); } catch(AggregateException aex) {//Deal with the exceptio...

c# – 如何使用线程处理许多任务【代码】

我有单独处理’很多(可能> 100,000)记录的C#要求.顺序运行此过程被证明是非常慢的,每个记录花费大约一秒钟左右完成(超时错误设置为5秒). 我想通过使用一定数量的工人’线程’尝试异步运行这些任务(我谨慎地使用术语’线程’,因为我不确定我是否应该查看线程,或任务或其他事情) . 我查看了ThreadPool,但我无法想象它可以排队所需的请求量.我理想的伪代码看起来像这样……public void ProcessRecords() {SetMaxNumberOfThreads(20);M...