Tag: multithreading

控件和线程

我有一个创建新线程的按钮。 该线程包含以下内容。 foreach (DataRow r in results.Rows) { var item = new ResultItem(this) { Image = r[1].ToString(), Video = r[2].ToString(), Title = r[3].ToString().Trim(), Duration = r[4].ToString().Trim() }; SearchFlow.Controls.Add(item); } 我得到这个错误:在一个线程上创建的控件不能作为另一个线程上的控件的父级。 ResItem是自定义用户控件,它是项目的一部分,而不是第三方控件。 有没有解决的办法? 如何将此控件添加到新线程中的流表?

文件下载的带宽限制

我遵循代码来限制应用程序的文件下载速度; context.Response.Buffer = false; context.Response.AppendHeader(“Content-Disposition”, “attachment;filename=” + arquivo.Nome); context.Response.AppendHeader(“Content-Type”, “application/octet-stream”); context.Response.AppendHeader(“Content-Length”, arquivo.Tamanho.ToString()); int offset = 0; byte[] buffer = new byte[currentRange.OptimalDownloadRate]; while (context.Response.IsClientConnected && offset < arquivo.Tamanho) { DateTime start = DateTime.Now; int readCount = arquivo.GetBytes(buffer, offset, // == .ExecuteReader() (int)Math.Min(arquivo.Tamanho – offset, buffer.Length)); context.Response.OutputStream.Write(buffer, 0, readCount); offset += readCount; CacheManager.Hit(jobId, fileId.ToString(), readCount, buffer.Length, null); […]

ASP.NET WebMethod在长时间运行的SQL过程中持有线程池线程

我有一个报告页面,可以从数据库表中构建报告。 报告以表格格式显示。 为了处理用户交互,我构建了一个JQuery表插件,允许用户使用自定义排序,过滤和分页来自定义报表。 JQuery插件使用一组ajax请求来使用数据填充表。 这些ajax请求调用asp.net(c#)webMethods,后者又使用一组类来构建SQL并执行Query。 构建的查询在与WebMethod相同的线程中运行,这会导致问题,因为SQL可能需要超过30秒才能返回。 我一直在阅读有关启动新线程和异步方法的内容。 我的问题是我显然不希望从ASP.NET池中保存一个线程来执行SQL的整个过程,因为它只等待I / O. 是否可以在等待SQL Server的响应时将线程返回到线程池? 可以使用Begin和End ADO.net命令实现吗? 我问的原因是目前这不是一个问题,但随着使用此系统的用户数量的增加,所有为新用户服务的线程池将会运行这些长查询。

跨线程读取变量的值并不重要

在c#中,是否有一种更新变量(不使用锁)的方法,其中多个线程可以读取值,但更新变量的线程不重要。 我的意思是,如果一个线程更新该值,但其他线程几分钟后没有获得更新的值,那就没问题。 有这样的方式吗? 非常感谢

(有时)字典中没有给定的键

我使用下面的代码启动带有list参数的线程,但有时它会引发exception: 给定的密​​钥不在字典中 从这一行: Thread MoveThread = new Thread(() => MoveTask(ControllerDictionary[i])); 我该如何解决这个错误? 完整代码: var ControllerDictionary = ConfigFile.ControllerList.Select((c, i) => new { Controller = c, Index = i }) .GroupBy(x => x.Index % AppSettings.SimultaneousProcessNumber) .Select((g, i) => new { GroupIndex = i, Group = g }) .ToDictionary(x => x.GroupIndex, x => x.Group.Select(xx => xx.Controller).ToList()); for (int i […]

使用Reader Writer Lock创建线程安全列表

完全编辑早期版本,以下实现可以是线程安全列表实现。 我只需要知道它是否真的是线程安全的,我知道性能明智仍然存在问题。 目前版本正在使用ReaderWriterLockSlim,我有另一个使用Lock的实现,做同样的工作 使用System.Collections.Generic; 使用System.Threading; /// /// Thread safe version of the List using ReaderWriterLockSlim /// /// public class ThreadSafeListWithRWLock : IList { // Internal private list which would be accessed in a thread safe manner private List internalList; // ReaderWriterLockSlim object to take care of thread safe acess between multiple readers and writers private […]

有没有办法创建一个重复的网络摄像头设备?

我正在用C#编写一个multithreading应用程序来同时处理网络摄像头输入。 是否有任何代码项目可以将网络摄像头的副本创建为新设备,因此每个线程可以采用真实设备还是虚拟设备而不会相互干扰? 许多软件声称“拆分”网络摄像头(用于效果和filter),但是一旦他们创建的设备被使用,就无法打开真实设备。 换句话说,我需要网络摄像头充当两个,并且每个网络摄像头都可以同时访问。

未发生C#WinForms应用程序中的预期跨线程exception

我来自WPF,我是WinForms的新手。 在研究跨线程情况时,我预计不会发生跨线程exception。 以下是我的情况的基本摘要。 有一个名为label1 Label控件和一个名为button1 Button 。 button1的click事件处理程序基本上如下所示: private void button1_Click(object sender, EventArgs e) { Task.Factory.StartNew(()=> { label1.Text = “Some-Other-New-Text”; }); } 这不会像我期望的那样抛出跨线程exception。 这是因为WinForms应用程序没有交叉线程问题吗? 请注意,我在Visual Studio 2013以及Visual Studio 2010中对此进行了调查。

.Net(C#)异步x并行性能

.Net对异步和并行编程很有帮助。 有一些关于这方面的好文章 但什么是最好的和在哪种情况下? 我刚刚创建了一个简单的控制台应用程序来试图找出答案。 它看起来像异步和等待更快,但它消耗更多的内存。 这是在同一台机器上重复测试三次的平均结果(CPU = AMD FX 8120八核处理器3,1GHz和RAM = 16GB): 异步经过时间= 23,0841498667 | 记忆(MB)= 62154 平行经过时间= 107,9682892667 | 记忆(MB)= 27828 代码在GitHub中 ,非常简单。 该代码请求网页250次。 异步测试是: public async static Task AsynchronousTest() { List<Task> taskList = new List<Task>(); for (int i = 0; i < TOTAL_REQUEST; i++) { Task taskGetHtmlAsync = GetHtmlAsync(i); taskList.Add(taskGetHtmlAsync); } await Task.WhenAll(taskList); […]

信号量优先

我知道System.Threading命名空间中的Semaphore类,但我不知道它是否允许等待线程具有不同的优先级。 如果两个线程正在等待打开的插槽,是否有办法允许具有更高优先级的线程使第一个打开的插槽可用?