【发布时间】:2017-05-10 14:40:24
【问题描述】:
我有一个带有某种“宏管理器”的程序,它可以(或至少应该)一个接一个地保存和播放宏。宏是用户可以自己选择的功能。
例如,如果用户想要创建一个新宏,他将执行以下步骤:
- 点击“创建”按钮
- 点击“选择功能”按钮
- 单击另一个按钮(该按钮后面包含一个功能)
- 播放宏
如您所见,用户应该能够动态选择他想要使用的功能。
我尝试使用委托,但我并不真正理解它们(尽管我已经阅读过)
这是我的代码:
MacroManager(保存宏并一个接一个地播放):
namespace ControlCenter
{
public class ControlCenterMacroManager
{
public List<ControlCenterMacro> macroList = new List<ControlCenterMacro>();
public string macroName;
public void runMacroList()
{
Thread t = new Thread(new ThreadStart(runMacroList_t));
t.Start();
}
public void runMacroList_t()
{
foreach (ControlCenterMacro macro in macroList)
{
Console.Write("Playing Macro: ");
macro.Run();
}
}
}
}
这将是宏:
namespace ControlCenter
{
public class ControlCenterMacro
{
public bool isTimeout=false;
public int timemilli=0;
public delegate int macroAction();
public macroAction action;
public void Run()
{
if (isTimeout)
{
Console.Write("Waiting " + timemilli + " milliseconds ");
Thread.Sleep(timemilli / 4);
Console.Write(".");
Thread.Sleep(timemilli / 4);
Console.Write(".");
Thread.Sleep(timemilli / 4);
Console.Write(".");
Thread.Sleep(timemilli / 4);
Console.WriteLine(" done");
}
else
{
Console.WriteLine("Playing action " + action.ToString());
action();
}
}
}
}
这是我想放在它后面的可能功能之一(位于另一个项目的另一个类中):
public int turnOn()
{
Console.WriteLine("Einschalten:");
if(HomeMaticHttpRequest.sendRequest(this.url + "statechange.cgi?ise_id=" + this.RecieverId + "&new_value=true")!=null)
return 0;
return 1;
}
有谁知道我如何在不进行过多硬编码的情况下解决这个问题? (希望保持相对动态)
【问题讨论】:
-
宏是预定义的功能吗?用户是否应该为宏设置任何参数?
-
可能的功能有哪些限制?他们有返回值吗?还是有些类型无效?他们有参数吗?
-
您甚至可以使用纯 C# 编写脚本,您可以使用 CodeDom 生成即时代码,将其编译到程序集中并存储起来,以便您可以多次重复使用想要。
-
我的回答够笼统,还是你还需要更笼统?
-
@MongZhu 很抱歉我没有回答 - 一个星期没有笔记本电脑。这个答案很有帮助,所以是的,不需要更通用的atm :) ty 来帮助我