C#从构造函数中调用事件
是否可以从C#中的构造函数内部调用/trigger/throw/fire(不知道正确的术语是什么)事件 我问这个问题的原因是我遇到了一个难题:我有一个表单需要很长时间才能启动(通过它的构造函数),因为它需要加载很多文件。因此,我希望在主窗体启动之前显示一个启动/加载屏幕。此外,我想用更新来更新启动屏幕,告诉它到目前为止加载了什么,没有加载什么 我在一个单独的线程中运行启动屏幕,并希望发送有关通过事件加载的内容的消息。不幸的是,我似乎无法从主窗体的构造函数中触发事件。有人对我能做什么有什么建议吗?或者如何从构造函数中触发事件C#从构造函数中调用事件,c#,multithreading,events,constructor,C#,Multithreading,Events,Constructor,是否可以从C#中的构造函数内部调用/trigger/throw/fire(不知道正确的术语是什么)事件 我问这个问题的原因是我遇到了一个难题:我有一个表单需要很长时间才能启动(通过它的构造函数),因为它需要加载很多文件。因此,我希望在主窗体启动之前显示一个启动/加载屏幕。此外,我想用更新来更新启动屏幕,告诉它到目前为止加载了什么,没有加载什么 我在一个单独的线程中运行启动屏幕,并希望发送有关通过事件加载的内容的消息。不幸的是,我似乎无法从主窗体的构造函数中触发事件。有人对我能做什么有什么建议吗?
提前谢谢。这个问题可能会对你有所帮助
它包含来自构造函数的事件调用过程如果可以将参数传递给构造函数,则可以使用回调。比如:
public class MyClass
{
public MyClass(Action<Progress> callback)
{
// Do work here...
callback(progress);
// More work, etc.
}
}
公共类MyClass
{
公共MyClass(操作回调)
{
//在这里工作。。。
回调(进度);
//更多的工作等。
}
}
如果您使用的是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");
}
}
}
您是否在winform WPF中工作?构造函数应该用于初始化类的状态。然后其他一切都出现了。在你的情况下,看起来你加载了不合适的逻辑。因此,将逻辑和事件放在单独的方法中,比如说
Init
。您正在处理什么类型的应用程序?WPF、Windows Phone等。。你试过异步加载文件吗?@jmaster18和X-TECH:我正在工作winform@user2636234当整个点都不需要时,为什么要从构造函数内部调用它?第二点不清楚。如果涉及WinForms,控件
或窗体
类中有很多事件。看见其他(WPF)类似。通常的事情。欢迎来到堆栈溢出!虽然这可以从理论上回答这个问题,但这里要包括答案的基本部分,并提供链接供参考。