从构造函数内部调用事件

本文关键字:事件 调用 内部 构造函数 | 更新日期: 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.
    }
}