这是一个概念性问题:我想在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()命令是一个坏主意,或者是一个糟糕的实践。然而,我还没有想出如何以不同的方式构建我的程序的结构。为此,我希望能对更好的架构提出一些意见。
发布于 2016-02-19 20:51:27
这里链接文章的作者。为了实现清晰的分离,您可以为SDK事件启动一个专用线程。在我的商业图书馆里,看起来是这样的:
这样,您就不会有死锁和SDK与UI代码完全分离的问题。当然,这也意味着您必须使用适当的线程同步来对每个特定线程执行函数。
我计划在有时间的时候用上述的更改来更新代码项目库。
https://stackoverflow.com/questions/35492576
复制相似问题