【问题标题】:In the execution of a program, are events like threads? WPF在程序的执行中,事件是否像线程? WPF
【发布时间】:2016-04-19 20:08:59
【问题描述】:

我有一个后台工作线程不断更新来自网络源的窗口中显示的数据。我还有一个可以触发事件的按钮。

我的问题是,事件方法在哪个阶段(相对于后台工作者执行)执行?它是否与线程相似,因为它们同时发生?即,当我的按钮单击方法正在执行时,后台工作人员是否仍将运行?在这种情况下,我将需要使用锁定。还是后台worker会暂停直到按钮点击方法终止?

【问题讨论】:

  • 事件 handler 与触发器在同一线程上执行,除非有自定义代码在 不同 线程上触发处理程序。因此,如果后台工作人员调用单击事件处理程序,它将暂停,直到单击事件处理程序终止。如果处理程序因单击按钮而被执行,它将在 UI 线程中执行。

标签: c# wpf multithreading events


【解决方案1】:

由 UI 控件(例如按钮)引发的事件在主线程中执行,也就是 UI 线程。您自己提出的事件会在您提出它们的任何线程上提出。所有事件引发都会阻止它们自己的线程的执行,直到它们完成。当您调用它们时,它们并不是很特别:只是围绕调用任意代表列表的一点语法糖。

在没有任何explicit synchronization 代码的情况下,任何其他在后台嗡嗡作响的线程都会愉快地继续执行。

如果您需要或想要在 UI 线程中的事件处理程序和工作线程之间进行通信,则需要编写显式代码来执行此操作。这里没什么特别的:只有两个线程。

如果您同时拥有一个事件处理程序和一个线程,将它们的油腻小手套放在同一个对象上,并且如果对该对象的操作不是原子的,那么您是对的:您需要锁定。 Thread-safe collections may come in handy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    相关资源
    最近更新 更多