带有线程的Windows窗体项目

时间:2014-04-01 18:03:34

标签: vb.net multithreading

我已经阅读了很多关于不支持MTA的Windows窗体项目的资料。我知道了。但是,我也读过有关Background worker,async / await和BeginInvoke与此类解决方案一起使用的内容。 Thisthis只是几个例子。 Here's one甚至使用MSMQ。我审查过的一些例子可以追溯到VB6。

我需要使用代码来扩充Windows窗体项目,以便通过可以从异步功能中受益的API调用与供应商服务进行交互。这是2014年,最好的方法是什么?我使用VB NET并使用VS 2010进行开发。

理想情况下,我想创建一个具有与供应商交互的逻辑的类库,并将结果返回到我的Windows窗体项目。可以这样做吗?

1 个答案:

答案 0 :(得分:1)

不支持MTA这一事实并不意味着您无法使用多个线程。 MTA模型只是使用多个线程的一种方式,但由于很难为该模型实现对象,Windows Form使用的是STA模型。

这一点的重要作用就是它意味着应用程序中的主线程负责处理与用户界面有关的所有事情。您可以根据需要或需要启动任意数量的线程,但只要需要在用户界面中显示这些线程中的任何内容,就必须使用Invoke方法在主线程中完成更新。 / p>

框架中已存在异步方法,例如BeginRead类中的BeginWriteSystem.IO.FileStream方法。您可以查看有关如何在框架中使用异步方法的一些提示。

如果API是同步的,您可以通过简单地启动执行API调用的新线程然后在完成后执行回调方法来创建异步方法。由于它是等待响应的线程,因此调用不会占用主线程。