从DLL更新GUI状态栏

时间:2013-09-15 15:06:39

标签: c# dll delegates callback

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

回调可能是此选项。但无法正确写入。

如果有人能给我正确的语法,那将会很棒。

2 个答案:

答案 0 :(得分: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
   }
}

答案 1 :(得分: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;