【c# – 等待后台线程完成】教程文章相关的互联网学习教程文章

c#-在哪个线程上调用SocketAsyncEventArgs Completed以及在何处处理消息

我有一个使用SocketAsyncEventArgs异步接收UDP数据包的标准实现.我从文档和一些谷歌搜索中无法理解的是我是否应该真正处理回调本身内部的消息,例如我所指的完整实现中的this comment indicates,还是应该将处理工作卸载到其他线程,例如通过ConcurrentQueue或BlockingCollection. 我的担忧如下: >如果直接在回调中进行处理,是否会由于临时线程池不足或其他一些实现细节而降低接收性能或引入随机延迟?>由于处理上的细微延迟(与仅卸载...

c#-下面的类线程安全吗?说明【代码】

有人可以解释我是否可以将下面的类称为“线程安全”? 据我所知,如果不破坏现有功能,我们可以调用线程安全的东西 例:public class BackgroundWorker {private readonly IDictionary<string, RunningTask> _runningTasks = new ConcurrentDictionary<string, RunningTask>();/// <summary>/// Executes async job for the specified key, only one at a time./// </summary>/// <param name="key"></param>public void Enqueue(str...

C#从一个线程设置字典对象,从另一个线程获取字典对象是否是线程安全的【代码】

假设我们有一个奇怪的类,其中包含 >公共属性ReadOnlyDictionary< string,string>地图{get;私人套装;}>方法更新,该方法在调用时会重置地图字典. 从一个线程调用Update方法并从另一个线程获取Map是否是线程安全的?public class Example {public ReadOnlyDictionary<string, string> Map{ get; private set; }public void Update(IEnumerable<KeyValuePair<string, string>> items){Map = items.ToLookup(x => x.Key).ToDictionary(...

C#-RestSharp异步后台线程【代码】

我正在尝试使用RestSharp将一些POST请求发送到服务器.然而: >服务器大约需要20秒来处理每个请求>在等待它们完成时,我不想锁定我的GUI. RestSharp具有异步功能,所以我写了这个:var handler = _restClient.ExecuteAsync(request, response =>{if(response.IsSuccessful){Console.WriteLine("Success");}});我需要做的是确保这发生在单独的后台线程上,以免锁定GUI,并等待每个响应,检查是否成功,然后发送下一个. 有什么建议么?某种队...

C#-从一个线程到另一个线程的实时文本供稿【代码】

在线程“ A”中,我想读取一个很长的文件,并且发生这种情况,我想将读取的每一行发送到另一个线程“ B”,这将对它们执行某些操作. 基本上,我不想在开始处理行之前等待文件加载完成.(我绝对想要2个线程并在它们之间进行通信;我以前从未做过此事,我想学习) 那么,我该怎么做呢?线程A在线程A向线程B发送另一行之前,应等待线程B完成对“当前行”的处理.那么线程B中的缓冲区又如何呢? 另外,请给出一个示例,说明由于没有发现/看到任何有用...

C#-涉及线程和空闲时间的几个问题

我正在尝试学习或整理自己收集的点点滴滴,所以我遇到了几个问题: >我有一个线程在执行操作后会休眠5个小时,现在当该线程休眠时,应用程序会进入空闲状态吗?它会自动产生ie,还是我必须调用thread.Yield()?>如果您有一个等待用户输入的wpf应用程序,它在等待时是否也会进入空闲状态?让我们假设应用程序可能必须等待一整天才能被告知要执行某项操作?它在等待时会做什么呢?它会一直消耗资源,还是会自动地自动进入等待状态的空闲状态...

C#-AsyncWaitHandle.WaitOne会阻止CLR线程吗?还是创建一个I / O完成端口?【代码】

我有这个问题,AsyncWaitHandle.WaitOne会阻止CLR线程吗?还是创建一个I / O完成端口? 例如,当我运行我的应用程序时,我启动一个任务“ A”来初始化一些数据,当新请求到达时,我希望它们等到“ A”完成后,因此可以执行IAsyncResult.AsyncWaitHandle.WaitOne. ..它阻塞调用线程直到’A’结束还是创建I / O完成端口,当’A’完成时也会通知该端口. 如果没有,有办法吗? 问候.解决方法:是的,它阻塞了线程,但是像其他任何WaitHandle一样,它...

C#:BackgroundWorker线程优先级

我在C#中使用BackgroundWorker,并且需要使用AvSetMmThreadCharacteristics将线程的优先级更改为RealTime,并将特性更改为“ Pro Audio”. 由于BackgroundWorker会回收ThreadPool中的线程,因此不建议更改此类属性,但是,如果我不得不重写代码以使用常规Thread()代替,则我会放弃所有其他功能(取消/进度/等). 那么,坚持使用BackgroundWorker线程时会发生什么问题?解决方法:只需创建一个单独的线程,即可拥有它.池线程仅用于相对较短的时...

使用多线程对C#进行OCR【代码】

我需要有关WinForms C#应用程序中多线程实现的建议.我们有一幅图像-带有文本和数字,并且有单独的方法可以对不同类型的数据进行OCR.例如:decimal[] numbers = getNumbers(bitmap, dictionary1); string[] text = getText(bitmap, dictionary2); int[] integers = getInts(bitmap, dictionary3); // add 5 more data types (list, int[], etc..)结果,整个过程大约需要1秒钟. 我当时正在考虑同时在不同的线程上运行OCR.因此,我尝试使...

c#-确保对字典中值列表的线程安全操作【代码】

我有一个Dictionary< object1,List< object2> (我为我的结构做了一个抽象,有点复杂). 字典中的列表是在非并行上下文中初始化的,但是向列表中添加新元素需要一个线程安全的方法.不会发生删除项目(字典对象将在交易结束时被处理).另外,键值对仅在初始化时添加,因此在工作期间不会从字典中添加或删除键,而仅更新值. 我不能使用并发集合,我陷于旧的.NET Framework中. 首先,我用ReadWriteSlimlock锁定了整个字典.好吧,这是非常糟糕的表现...

c#-如何确定使用TPL时方法将在哪个线程上执行?【代码】

我知道TPL是面向任务的,而经典的线程模型是面向工作者的.通过任务,您可以将精力主要集中在要解决的问题上,而不是如何解决问题的机制上.它将完成.但是对于线程和任务关系,我还是有些困惑. 下面是一个演示代码:namespace AsyncUnderTheHood {class Program{static void Main(string[] args){Console.WriteLine("Main Start : {0}", Thread.CurrentThread.ManagedThreadId);AwaitTest();Console.WriteLine("Main End : {0}", Thread....

线程同步C#【代码】

我有一个多线程应用程序. 我正在尝试同步/线程安全static void Main(string[] args) {Thread t = new Thread(()=>Met1(x));Monitor.Enter(t);t.start();Monitor.Exit(t);Thread t2 = new Thread(()=>Met2(x,y));Monitor.Enter(t2);t2.start();Monitor.Exit(t2); }但是,该应用程序不是线程安全的/同步的.解决方法:Monitor.Enter和Monitor.Exit的调用必须由线程自己完成.在您的代码中,这是由主线程在设置两个线程的过程中完成的.而且...

c#-在MVC的线程中的会话中存储值【代码】

我对MVC还是很陌生,所以如果我错过了任何东西,请原谅我. 在我的一个控制器中,我启动了一个类,该类进行了一些处理并输出如下字符串:[HttpPost] public ActionResult Check(string reg) {string sCarmodel;GetRegInfo gri = new GetRegInfo(reg, out sCarmodel);Session["test"] = sCarmodel;return View("Check"); }到目前为止,效果很好,并且sCarmodel的输出已正确存储在Session中,以后可以在View中对其进行访问.但是,我需要将类放...

c#-非UI“调用线程无法访问此对象,因为其他线程拥有它”【代码】

我有以下代码:var queue = printer.PrintQueue; var canPrint = ! Dispatcher.CurrentDispatcher.Invoke(()=> queue.IsPaperJammed || queue.IsOutOfPaper || queue.IsInError || queue.HasPaperProblem);它抛出以下错误:The calling thread cannot access this object because a different thread owns it我已经在UI线程上尝试了此操作(使用如上所示的调度程序),并且在当前线程上(没有调度程序)尝试了此操作. 有没有办法询问一个...

c#-MVC 4中的多线程

我是ASP.NET MVC的新手(使用4),并且对多线程有一些基本问题. >现在,我已经编写了所有控制器.是否应该显式创建线程轮询并为每个传入请求分配线程?我读到一些东西暗示这种多线程是在MVC中自动完成的,我不应该自己做.这是真的?>大多数请求都会更改数据库(即上传文件). post表示DbContext不是线程安全的,选择的答案是为每个线程创建一个新实例,这是我在控制器中所做的.如果MVC自动创建线程(问题1),这是否安全? 谢谢!解决方法:1)您不...