我有一个用C#开发的应用程序和一个用于串行通信的C#dll。 每隔10秒我想从dll更新GUI并想要从dll向主程序发送状态消息。
回调可能是此选项。但无法正确写入。
如果有人能给我正确的语法,那将会很棒。
答案 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;