草庐IT

线程队列

全部标签

c# - 从 WinRT 中的线程更新 UI

自从几天前发布了Windows8消费者预览版以来,我正在使用C#开发新的WinRT(适用于Metro应用程序),并将我自己编写的IRC类移植到新的线程和网络。问题是:我的类正在运行一个从服务器接收消息的线程。如果发生这种情况,线程会进行一些解析,然后触发一个事件来通知应用程序这件事。订阅的函数然后“应该”更新UI(一个文本block)。这就是问题所在,线程无法更新UI,并且与.NET4.0一起使用的调用程序方法似乎不再可行。是否有新的解决方法或更新UI的更好方法?如果我尝试从事件订阅者更新UI,我将得到此Exception:Theapplicationcalledaninterface

C# 和 bool 的线程安全

我对这个主题很困惑——读取/切换bool值是否是线程安全的。//caseone,nothingprivateboolv1;publicboolV1{get{returnv1;}set{v1=value;}}//casetwo,withInterlockedonsetprivateintv2;publicintV2{get{returnv2;}set{Interlocked.Exchange(refv2,value);}}//casethree,withlockonsetprivateobjectfieldLock=newobject();privateboolv3;publicbool

c# - 使用 .NET 进行多线程文件处理

有一个文件夹包含1000多个小文本文件。我的目标是在将更多文件填充到文件夹中时解析和处理所有这些文件。我的意图是对该操作进行多线程处理,因为单线程原型(prototype)需要6分钟来处理1000个文件。我喜欢如下所示的读者和作者线程。当读者线程正在读取文件时,我想让编写者线程来处理它们。一旦读者开始阅读文件,我想将其标记为正在处理,例如通过重命名它。阅读后,将其重命名为completed。如何处理这样的多线程应用程序?分布式哈希表好还是队列好?我应该使用哪种数据结构来避免锁定?这个方案有更好的方法吗? 最佳答案 由于对.NET4如

c# - 何时在线程安全锁定代码中使用 'volatile' 或 'Thread.MemoryBarrier()'? (C#)

我什么时候应该使用volatile/Thread.MemoryBarrier()来保证线程安全? 最佳答案 当您想跨线程访问变量而不锁定时,您可以使用volatile/Thread.MemoryBarrier()。原子变量,例如int,总是一次性读取和写入整个变量。这意味着您永远不会在另一个线程更改它之前获得一半的值,而在它更改之后获得另一半。因此,您可以在不同线程中安全地读取和写入值,而无需同步。但是,编译器可能会优化一些读写操作,您可以使用volatile关键字来阻止这些操作。例如,如果您有这样的循环:sum=0;foreach

c# - 如何以线程安全的方式访问 C# WPF 控件?

为此,我尝试使用MSDN中的示例,但它们似乎只适用于Windows窗体。例如,使用.InvokeRequired的方法依赖于Windows窗体控件,但是此方法不适用于WPF控件。Backgoundworker方法也会抛出InvalidOperationException-Thecallingthreadcannotaccessthisobjectbecauseadifferentthreadownsit.那么如何在WPF上下文中完成呢? 最佳答案 您只想使用Dispatcher.Invoke方法(或异步等效Dispatcher.Be

C# 线程 - 锁定对象

我正在尝试在C#应用程序中锁定“盒装”对象,这不可能吗?classt{System.Objectt_x=newobject();publict(intp){t_x=p;}publicvoidw(){lock(t_x){for(inti=0;i在另一个类中我可以启动2个线程:Threadb1=newThread(newThreadStart(t1.w));b1.Start();Threadb2=newThread(newThreadStart(t1.w));b2.Start();但是该部分未锁定。当我锁定一个任意对象(即一个创建但未修改为对象a=newobject())时,它锁定得很好。

c# - WPF/多线程 : UI Dispatcher in MVVM

也就是说,在MVVM环境中,我在后台线程中,我想在ui控件上运行更新。所以通常我会去myButton.Dispatcher.BeginInvoke(blabla)但我无权访问myButton(因为View模型无权访问View的控件)。那么这样做的正常模式是什么?(我猜总有绑定(bind),但我想知道如何通过调度程序做到这一点) 最佳答案 我通常使用Application.Current.Dispatcher:因为Application.Current是静态的,所以您不需要对控件的引用 关

c# - 将权限/身份验证复制到子线程...?

这是我注意到的一些非常奇怪的事情。我正在编写CRM2011Silverlight扩展,在我的本地开发实例上一切正常。该应用程序使用OData进行通信,并大量使用System.Threading.Tasks.Task来执行后台的所有操作(FromAsync是一种祝福)。但是,我决定在CRM2011Online中测试我的应用程序,令我惊讶的是,它不再有效;结束检索任务时我会收到安全异常。使用Fiddler,我发现CRM试图将我重定向到Live登录页面,考虑到我已经登录,这没有多大意义。经过更多尝试,我发现错误是因为我从与UI线程不同的线程访问服务。这是一个简单的例子://thiswillw

c# - wcf服务中的线程中止异常

我有一个托管在IIS6.0上的WCF服务(内置于.NETFramework3.5中)。代码流程如下客户端(这是另一个Web服务)调用WCF服务WCF服务调用一个线程在后台进行处理并立即响应被调用者。后台线程在完成所有处理后,回调线程。这个调用基本上是一个HTTPs请求,因为客户端是一个网络服务。我正在对我的WCF服务进行负载测试以定义阈值。观察结果如下:1分钟内向WCF服务发出的1024个请求的大约3次迭代成功通过。完成每次迭代所需的时间约为25-30分钟。然而,从第4次迭代开始,可以看到批量失败。大约50%的请求失败,但出现以下异常。Exception-Threadwasbeinga

c# - 哪些阻塞操作会导致 STA 线程发送 COM 消息?

当COM对象在STA线程上实例化时,该线程通常必须实现消息泵以编码来回其他线程的调用(请参阅here)。可以手动发送消息,也可以依靠一些但不是全部线程阻塞操作在等待时自动发送与COM相关的消息这一事实。文档通常无助于决定哪个是哪个(参见thisrelatedquestion)。如何确定线程阻塞操作是否会在STA上发送COM消息?到目前为止的部分列表:阻止做泵*的操作:Thread.JoinWaitHandle.WaitOne/WaitAny/WaitAll(虽然不能从STA线程调用WaitAll)GC.WaitForPendingFinalizersMonitor.Enter(因此lo