【问题标题】:Want to open MDI Child in a different thread想要在不同的线程中打开 MDI Child
【发布时间】:2011-07-15 10:27:53
【问题描述】:

我有一个 MDI 子窗体,其中包含一个 DataGridView,它使用计时器不断更新。我不希望在 Timer 间隔上触发的 SQL 操作与其他操作发生冲突,因此希望为此 MDI 子窗体使用不同的线程。

我想知道要创建什么线程。我从 MDI 父表单的加载事件中打开此表单。那个时候我要不要创建一个线程,把MDI子的所有加载代码放在那里还是别处?

【问题讨论】:

  • 答案当然是你不。所有表单都需要显示在一个线程上,通常称为“UI 线程”。将处理分离到一个单独的线程,而不是整个表单。

标签: c# .net-3.5


【解决方案1】:

你不能在另一个线程上做任何 UI 事情。一个进程只能获得一个 UI 线程,并且所有 UI 代码都应该在该线程上运行(尝试在不同的线程上执行 UI 操作会导致异常)。

您应该做的是让计时器在 UI 线程上运行,然后从那里转到后台线程。当数据返回时,请注意您需要使用 Dispatcher 将结果同步到 UI 线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多