首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中并行任务中运行EDSDK

在C#中并行任务中运行EDSDK
EN

Stack Overflow用户
提问于 2016-02-18 21:16:11
回答 1查看 404关注 0票数 0

这是一个概念性问题:我想在Windows.Form应用程序中运行佳能EDSDK。现在,理想情况下,我希望将数据从ui和模型中分离出来。具体来说,这意味着我的windows.form来自我的EDSDK对象。通过四处窥探,试图让相机独立于我的表单运行,我在这里看到了这个帖子EDSDK callbacks not working,它基本上描述了我最初使用EDSDK的经历。

因此,经过进一步的研究,我发现我需要用Application.Run()启动表单,以便接收回调的Windows。因此,目前,我在UI表单中运行EDSDK,这给了我想要的功能。我构建了一个很好的工具箱,它可以在这里找到:http://www.codeproject.com/Articles/688276/Canon-EDSDK-Tutorial-in-Csharp。然而,我已经经历了冻结我的应用程序,很可能是由于系统缺少相机回调。(至少这是我的假设)

因此,我想要做的是回到最初的想法,在一个单独的任务中运行EDSDK,从而能够分离原因和调试任何问题。我在其他几篇文章中看到,运行多个Application.Run()命令是一个坏主意,或者是一个糟糕的实践。然而,我还没有想出如何以不同的方式构建我的程序的结构。为此,我希望能对更好的架构提出一些意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-19 20:51:27

这里链接文章的作者。为了实现清晰的分离,您可以为SDK事件启动一个专用线程。在我的商业图书馆里,看起来是这样的:

  • 事件循环:调用EdsGetEvent (被锁包围)的STA线程。您需要在这个线程上调用EdsInitializeSDK才能识别为SDK的主线程。
  • STA线程,它调用任何与相机相关的SDK函数(与事件循环被相同的锁包围)
  • :将在事件循环线程上运行。您可能希望在调用UI之前启动另一个线程(线程池)(因为死锁)。

这样,您就不会有死锁和SDK与UI代码完全分离的问题。当然,这也意味着您必须使用适当的线程同步来对每个特定线程执行函数。

我计划在有时间的时候用上述的更改来更新代码项目库。

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

https://stackoverflow.com/questions/35492576

复制
相关文章

相似问题

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