我想使用c#手动触发事件.例如,假设我想从表单B中激活表单A的Form_closing事件.怎么做?
得到一些评论后.我想我需要对此进行更多解释.
由于我的表单A引用了.dll,它在桌面上创建了一个自定义任务栏,因此我可以从表单B中关闭该自定义任务栏.我已经尝试过表单B中的FormA.Close().这样,.dll将从应用程序域中卸载,因此自定义任务栏占用的空间将被阻止.
但是,当我单击自定义任务栏中的关闭按钮时,情况并非如此.当我这样做时,空间被释放了.
这就是我想从表格B手动触发表格A的关闭事件的原因,这将解决我的问题.
谢谢.
Evg*_*eny 13
我们在一个项目中做了以下事情:
有一个GlobalNotifier类,它定义了我们想要在应用程序的不同模块中使用的事件,就像这样
public static class GlobalNotifier
{
public static event VoidEventHandler EnvrionmentChanged;
public static void OnEnvrionmentChanged()
{
if (EnvrionmentChanged != null)
{
EnvrionmentChanged();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当您需要让应用程序的其余部分知道环境已更改时,您可以在任何地方引发此事件,如下所示
GlobalNotifier.OnEnvrionmentChanged();
Run Code Online (Sandbox Code Playgroud)
此外,您可以在任何想要通知环境已发生变化的通知的地方订阅此事件.
public ReportingService()
{
GlobalNotifier.EnvrionmentChanged += new VoidEventHandler(GlobalNotifier_EnvrionmentChanged);
}
void GlobalNotifier_EnvrionmentChanged()
{
//reset settings
_reportSettings = null;
}
Run Code Online (Sandbox Code Playgroud)
因此,每当您更改环境时,您都会发起事件,并且所有需要了解该事件并执行某些操作的人都会收到通知.可能类似于您需要实现的目标.
此外,如果您需要传递参数,您可以按照自己喜欢的方式定义事件,基本上 -
public static event VoidEventHandler<SomeObject, List<OtherObject>> SomethingUpdated;
public static void OnSomethingUpdated(SomeObject sender, List<OtherObject> associations)
{
if (SomethingUpdated != null)
{
SomethingUpdated(sender, associations);
}
}
// ...
MyClass.SomethingUpdated+= new VoidEventHandler<SomeObject, List<OtherObject>>(MyClass_SomethingUpdated);
// ...
void MyClass_SomethingUpdated(SomeObject param1, List<OtherObject> param2)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)