从构造函数内部调用事件
本文关键字:事件 调用 内部 构造函数 | 更新日期: 2023-09-27 18:09:01
是否有可能从c#构造函数内部调用/trigger/throw/fire(不知道正确的术语是什么)事件?
我问的原因是我有一个困境:我有一个表单,需要很长时间来启动(通过它的构造函数),因为它需要加载很多文件。所以,我想要一个启动/加载屏幕出现,直到主表单被启动。此外,我还想更新启动屏幕,告诉它到目前为止哪些内容已经加载,哪些尚未加载。
我在一个单独的线程中运行启动屏幕,并希望通过事件发送关于加载内容的消息。不幸的是,似乎我不能从主表单的构造函数中触发事件。有谁能告诉我该怎么做吗?或者如何从构造函数中触发事件?
这个问题可能对你有帮助
c#构造函数事件包含构造函数的事件调用过程
如果您使用的是winform
,那么请查看以下代码
public partial class Form1 : Form //Your initial form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
LaunchWorkForm();
}
private void LaunchWorkForm()
{
var form2 = new Form2();
form2.OnStatusUpdated += form2_OnStatusUpdated;
form2.ShowDialog();
}
private void form2_OnStatusUpdated(string status)
{
//message comes from Working Form
//Invoke UI thread and update UI here
}
}
现在,你的表单或对话框有很多工作要做
public partial class Form2 : Form
{
public delegate void UpdateStatusHandler(string status);
public event UpdateStatusHandler OnStatusUpdated;
public Form2()
{
//Start thread here
if (OnStatusUpdated != null)
{
OnStatusUpdated("I am going to start work");
}
//Doing a lot of work here
if (OnStatusUpdated != null)
{
OnStatusUpdated("Some of work has been done");
}
//Do other
if (OnStatusUpdated != null)
{
OnStatusUpdated("Now I am ready to load the form");
}
}
}
如果可以向构造函数传递参数,则可以使用回调。比如:
public class MyClass
{
public MyClass(Action<Progress> callback)
{
// Do work here...
callback(progress);
// More work, etc.
}
}