0

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); 
  }
}
4

1 に答える 1

0

宣言する必要があるを使用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);
      }
    }
  }
}

うまくいけば、あなたはそれで何かをすることができます. ;)

〜ジョー

于 2012-05-26T13:25:15.673 に答える