3

在此处输入图像描述

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

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

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

我使用.net 4.0

4

3 回答 3

3

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

Thread dllExecthread = new Thread(dllMethodToExecute);

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

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

dllExecthread.Join();
于 2013-05-03T10:15:56.807 回答
1

也许你可以选择 TPL:

        //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
            });
于 2013-05-03T10:32:44.240 回答
1

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

于 2013-05-03T11:07:08.130 回答