【问题标题】:How to have a certain thread deal with an event (not to do with UI threading issues)?如何让某个线程处理事件(与 UI 线程问题无关)?
【发布时间】:2009-11-13 14:34:48
【问题描述】:

我正在自学基于线程的编程技术,而这个问题可能有点离谱……我什至不确定这是否可行,甚至不确定是否是解决这个问题的正确方法。如果合适的话,请纠正我应该问的问题。

我试图让某个线程处理一个事件(除了触发事件的线程),但我不希望 UI 线程处理它。需要说明的是,我希望这样做:

private void UpdateFromNewFrame(WindowFrame frame) {

    if (InvokeRequired) {
         BeginInvoke(new WindowUpdateHandler(UpdateFromNewFrame), new object[] { frame });
         return;
    }

    Text = frame.Title;
}

我正在寻找一种创建相同模式但使用非 ui 线程的方法。原因是我必须(在极少数情况下)执行一些冗长的处理,这会延迟触发事件的线程(以及此事件侦听器之后的其他事件侦听器)。

是否甚至可以调用线程,或者我应该在事件侦听器中创建一个新线程,还是有什么方法可以让事件侦听器全部在单独的(自动创建的)线程中调用?

【问题讨论】:

    标签: c# .net multithreading event-handling


    【解决方案1】:

    非 UI 线程必须有某种消息处理循环,就像 UI 线程一样。它会等待接收要处理的项目,并相应地处理它们。使用生产者/消费者队列很容易做到这一点,但创建新线程或使用线程池会更简单。

    【讨论】:

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