首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程交叉线程

多线程交叉线程
EN

Stack Overflow用户
提问于 2013-06-04 17:32:43
回答 1查看 69关注 0票数 0

我正在编写一个应用程序,其中我必须使用多个线程,每个线程都将执行一个任务,并且在该任务结束时将更新进度条以指示总体进度。问题是,因为我无法控制这些线程,它们可能会发生冲突,所以我使用了锁定作为预防措施,但也有人建议我使用以下代码或它的一些变体。我想听听你的意见,这段代码应该放在哪里。

代码语言:javascript
复制
var temp = updateProcess; //updateProcess is the event getting fired
        if (temp != null)
        {
            var eventListeners = temp.GetInvocationList();
            foreach (EventHandler e in eventListeners)
            {
                e.BeginInvoke(this, null, EndAsyncImageAcquiredEvent, null);
            }
        }
        else
        {
            throw new FatalException("No handler is attached to the camera's ImageAcquiredEvent");
        }

我应该创建一个每个线程调用的单独方法,然后该方法使用此代码来触发每个事件更新,还是应该将此代码包含在每个线程执行的派生方法中。

提前感谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 17:44:42

您尝试获取的可能导致冲突的共享资源是什么?如果它是进度条,那么它只能通过UI线程本身进行更新,您所需要做的就是从线程中使用Invoke和InvokeRequired。请参阅:Using InvokeRequired vs control.InvokeRequired

如果您有任何其他共享资源,在使用锁时,如果操作正确(没有死锁等)代码将是线程安全的,但这将以性能为代价。

最后,我将使用任务而不是线程(请参阅:How to update UI from child tasks in WinForms

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16914326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档