【问题标题】:MTAThread attribute and winform app with multiple threadsMTAThread 属性和具有多线程的 winform 应用程序
【发布时间】:2013-08-02 17:38:35
【问题描述】:

我在 MSDN 和网络上对此进行了一些阅读,现在比以前更加困惑。

我正在使用 vb.net windows 窗体应用程序并希望使用多个线程(但不是多个公寓)。

这是否意味着我需要在程序入口点设置 MTAThread 属性?

有些消息来源似乎表明是的,有些人说 Windows 窗体应用程序应该是 STA,因为 COM 对象,有些人说 MTA 将在创建线程时自动设置,有些人不是......现在完全混淆了。

如果我确实需要设置它,我可以在不禁用应用程序框架并创建一个模块来保存Public Sub Main() 的情况下执行此操作吗?

【问题讨论】:

  • 您能否解释一下您要完成的工作?也许我们有适合您的差异化方法。
  • @DonA 我的第一个线程应用程序,仍然不确定我是否需要设置 ,对于何时应该或不应该设置它没有足够清楚的来源。应用程序是单个公寓,多个简单线程,Windows 窗体应用程序。在默认前台线程上形成 UI,其他一切都在各种后台线程上。一些 BG 线程需要与彼此和 UI 交互。信息够不够?
  • 他们在做什么工作?他们应该如何相互交流?
  • 一个将运行 TcpListner,另一个作为调度程序工作,基本上决定何时执行任务(taskA),使用与 JobA 相关的上下文对象来生成一个新线程来实际执行 TaskA对于 JobA,它将生成其他线程来执行诸如与 SQL db、TCP 客户端等通信之类的操作。我仍在研究它们如何相互通信,因为我仍在学习线程:)

标签: vb.net multithreading attributes entry-point


【解决方案1】:

我会考虑将TCPListener 放入一个类对象中,具有调用表单可以访问的属性,这个类可以包含您的表单可以侦听的事件并将数据传递给 UI - 可能需要delegates。这些任务也可以是类对象,并且可以有一个List(Of Task),因为它们也是类对象,它们现在可以引发事件,这些事件将被正在监听它们的所有者听到。任何在单独线程上处理的任务都需要委托,即使有事件引发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多