【问题标题】:Multithreading with windows forms C#使用 Windows 窗体 C# 的多线程
【发布时间】:2013-06-19 00:08:30
【问题描述】:

我正在尝试制作一个 Windows 窗体应用程序,以显示所有正在运行的任务。如果我愿意,我想单独停止任务。我将该应用程序用作控制台应用程序,但是当我尝试将其构建为 Windows 窗体应用程序时,它搞砸了。这是我的代码的工作原理。

  • 循环
    • 做一个任务
    • 将其存储在列表中
    • 开始任务=
  • 结束循环

我想在我的表单中的 listView 中显示此列表,并每隔几秒钟更新一次,显示此任务的名称和状态。有人可以帮我解决这个问题或建议阅读多线程的好书吗? 谢谢。

【问题讨论】:

  • 你能提供代码吗?
  • “当我尝试将其构建为 Windows 窗体应用程序时,它搞砸了” 您从来没有告诉我们实际出了什么问题,请详细解释您遇到的错误(如果有)以及您看到的行为以及您期望看到的行为。还请包括任何可能与错误相关的代码。
  • “搞砸了”——问题肯定比这更具体吗?像,也许那里有一个异常
  • 只是为了加我的两分钱。好的阅读是使用 .net 进行并行编程link

标签: c# windows multithreading winforms visual-studio


【解决方案1】:

我将应用程序用作控制台应用程序,但是当我尝试将其构建为 Windows 窗体应用程序时,它搞砸了。

假设您在移植到 Windows 窗体期间没有更改逻辑,这可能是由于从任务中的后台线程更新了 Windows 窗体控件。

您只能从主 (UI) 线程使用 Windows 窗体控件,而不能从后台线程使用。如果要对 UI 执行更新,则需要使用 Control.InvokeControl.BeginInvoke 将回调封送回 UI 线程。

【讨论】:

  • 我觉得这很可能是问题所在,但在我们从 OP 获得更多细节之前,我不想贸然下任何结论。
  • @ScottChamberlain 是的 - 我对此提出质疑,但鉴于 OP 指定他们有一个“控制台应用程序中的工作版本”并切换到 Windows 窗体,但它不起作用,总的来说这是,线程和 Windows 窗体的第一大问题,所以我认为它很有可能成为问题 :)
猜你喜欢
  • 1970-01-01
  • 2015-03-17
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
相关资源
最近更新 更多