簡體   English   中英

在UI線程中引發事件

[英]raise event in UI thread

我需要在UI線程中引發事件,我發現的所有解決方案都僅適用於完整框架:例如具有GetInvocationList和ISynchronizeInvoke的非常簡單的解決方案,但是NET CF不支持ISynchronizeInvoke。 有什么方法可以在CF的UI線程中引發事件嗎? 我的代碼如下。 我使用.NET CF 3.5

class Publisher {
  public event EventHandler OnEventHandler;
  private void OnEvent()
  {
    var handler = OnEventHandler;
    if (handler != null) handler(this, EventArgs.Empty); 
  }
}

我使用MethodInvoker ,必須對其進行聲明(因為它在緊湊框架下不存在),然后包括指向父控件的鏈接(通常是主窗體):

class Publisher {
  #if PocketPC // MethodInvoker delegate is not declared in CF!
  public delegate void MethodInvoker(); 
  #endif
  private Form _parent;

  public Publisher(Form parent) {
    _parent = parent;
  }

  public event EventHandler OnEventHandler;
  private void OnEvent() {
    if (OnEventHandler != null) {
      MethodInvoker mi = delegate { OnEventHandler(this, EventArgs.Empty); };
      try {
        _parent.BeginInvoke(methInvoker);
      } catch (ObjectDisposedException) {
      } catch (NullReferenceException err) {
        LogError("OnEvent NullReference", err);
      } catch (InvalidOperationException err) {
        LogError("OnEvent InvalidOperation", err);
      }
    }
  }
}

希望您能夠做到這一點。 ;)

〜喬

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM