我有一个用 C# 开发的应用程序和一个用于串行通信的 C# dll。每 10 秒后,我想从 dll 更新 GUI,并希望将状态消息从 dll 发送到主程序。
回调可能是这个选项。但无法正确书写。
如果有人能给我正确的语法,那就太好了。
所以这只是一个例子。首先,您的 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
}
}
使用委托:
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;