1

我有一个用 C# 开发的应用程序和一个用于串行通信的 C# dll。每 10 秒后,我想从 dll 更新 GUI,并希望将状态消息从 dll 发送到主程序。

回调可能是这个选项。但无法正确书写。

如果有人能给我正确的语法,那就太好了。

4

2 回答 2

1

所以这只是一个例子。首先,您的 DLL 中公开事件的代码。

class MyWorkerClass
{
  public event EventHandler<System.ComponentModel.ProgressChangedEventArgs> Changed;

  void OnChanged(ProgressChangedEventArgs args)
  { 
     if (Changed != null) Changed(this, args);
  }

  public void DoWork(object state)
  {
     // do your work
     OnChanged(new ProgressChangedEventArgs(50, state);   // use percentage
  }
}

以及您的 GUI 中的代码。

public class MyGUI
{
   readonly MyWorkerClass worker;

   public MyGUI()
   {
      this.worker = new MyWorkerClass();
      this.worker.Changed += OnWorkerChanged;
   }

   public void OnWorkerChanged(object sender, ProgressChangedEventArgs args)
   {
      // ToDo: use args.ProgressPercentage to update a GUI element (example: ProgressBar)
      // Remark: make sure you are in the GUI thread. Use this.InvokeRequired to check
   }
}
于 2013-09-15T15:29:57.860 回答
0

使用委托:

    public class SerialReader
    {
        public Action<string> Callback;

        public void Read()
        {
            if (Callback != null)
                Callback("Here is a message for the status bar");

        }
    }

GUI 类注册的对象:

    public class GuiClass
    {
        public void foo() {

            var reader = new SerialReader();
            reader.Callback = UpdateStatusBar;

        }

        public void UpdateStatusBar(string message) {
            statusBar.Text = message;
        }

    }

确保回调设置在您的 GUI 代码中的某处:

reader.Callback = UpdateStatusBar;
于 2013-09-15T15:54:12.297 回答