在我的 WPF 应用程序中,我必须通过串行端口与数据存储进行通信。为了简单起见,我想将此通信分离到一个类库中。
在我的 DLL 中,我将向数据存储发出命令并等待 10 秒以接收回复。一旦我从数据存储中获得响应,我会将数据编译为有意义的信息并传递给主应用程序。
我的问题是如何让主应用程序暂停一段时间以从外部 dll 获取数据,然后继续处理来自 dll 的数据?
我使用.net 4.0
在我的 WPF 应用程序中,我必须通过串行端口与数据存储进行通信。为了简单起见,我想将此通信分离到一个类库中。
在我的 DLL 中,我将向数据存储发出命令并等待 10 秒以接收回复。一旦我从数据存储中获得响应,我会将数据编译为有意义的信息并传递给主应用程序。
我的问题是如何让主应用程序暂停一段时间以从外部 dll 获取数据,然后继续处理来自 dll 的数据?
我使用.net 4.0
考虑在新线程中调用 DLL 方法
Thread dllExecthread = new Thread(dllMethodToExecute);
并提供从主程序到 dll 的回调,该回调可以在完成时执行(这可以防止锁定 GUI)。
编辑:或者为了简单起见,如果您只想让主程序等待 DLL 完成执行随后调用:
dllExecthread.Join();
也许你可以选择 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
});
永远不要暂停你的主线程,因为它会阻塞 GUI。相反,您需要对后台通信触发的事件采取行动。您可以使用 BackgroundWorker 类 - 只需在 RunWorkerCompleted 中提供结果。