首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调用执行耗时任务的DLL?

如何调用执行耗时任务的DLL?
EN

Stack Overflow用户
提问于 2013-05-03 18:09:56
回答 3查看 1.1K关注 0票数 3

在我的WPF应用程序中,我必须通过串行端口与数据存储进行通信。为简单起见,我想将此通信分离到一个类库中。

在我的DLL中,我将向数据存储发出一个命令,并等待10秒以接收返回的响应。一旦我从数据存储获得响应,我将数据编译成有意义的信息,并将其传递给主应用程序。

我的问题是如何使主应用程序暂停一段时间,以便从外部dll获取数据,然后继续处理来自dll的数据?

我使用.net 4.0

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-03 18:15:57

考虑在新线程中调用DLL方法

代码语言:javascript
复制
Thread dllExecthread = new Thread(dllMethodToExecute);

以及提供从主程序到dll的回调,该回调可以在完成时执行(这防止在GUI上锁定)。

edit:或者为了简单起见,如果您只想让主程序等待DLL完成执行,则随后调用:

代码语言:javascript
复制
dllExecthread.Join();
票数 3
EN

Stack Overflow用户

发布于 2013-05-03 18:32:44

也许你可以使用TPL:

代码语言:javascript
复制
        //this will call your method in background
        var task = Task.Factory.StartNew(() => yourDll.YourMethodThatDoesCommunication());

        //setup delegate to invoke when the background task completes
        task.ContinueWith(t =>
            {
                //this will execute when the background task has completed
                if (t.IsFaulted)
                {

                    //somehow handle exception in t.Exception
                    return;
                }          


                var result = t.Result;
                //process result
            });
票数 1
EN

Stack Overflow用户

发布于 2013-05-03 19:07:08

永远不要暂停你的主线程,因为它会阻塞GUI。相反,您需要对后台通信触发的事件执行操作。您可以使用BackgroundWorker类-只需在RunWorkerCompleted中提供结果。

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

https://stackoverflow.com/questions/16356457

复制
相关文章

相似问题

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