考虑以下简单示例:
private Action _action;
public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e)
{
string msg = "test";
Expression<Action> exp = () => MessageBox.Show(msg);
_action = exp.Compile();
msg = "testC";
}
private void button2_Click(object sender, EventArgs e)
{
_action();
}
单击 button2 时,我看到testC
.
我的问题是:
我想存储稍后运行的操作。我可以随时安全地存储compile()
创建和使用它的委托吗?
我的问题主要是关于方法论点。我不知道它们是如何存储的(通过 ref 或按值),以及它们是否可以同时被 GC 清除。总的来说,我怀疑这是正确的方法。此外,msdn没有太大帮助。
我正在创建一个支持要执行的高优先级操作的 JobManager。有一堆默认操作和一些需要添加的高优先级。这部分是我注册高优先级作业的地方(使用 lambda -> 获取方法 -> 创建委托 -> 存储它 -> 在需要时运行)。我不确定这是否是存储动作的正确方法。