假设我有一个几个步骤的过程,例如在软件安装过程中。
每一步都会显示一个文本框并等待用户单击“下一步”按钮。
执行此操作的标准方法是进行如下回调:
process
{
Dialog1() // Will call callback2 when closed
}
callback2()
{
Dialog2() // Will call callback3 when closed
}
callbak3()
{
Dialog3() // Will call callback4 when closed
}
当您必须执行很多步骤时,这种技术会使代码变得非常难以阅读 将您的进程划分为每个连续的回调函数(更不用说保存 上下文从一个到另一个)。
什么是更容易阅读的方法?理想情况下,该过程应如下所示 这个:
process()
{
Dialog1()
callback1() // stop method until closed
Dialog2()
callback2() // stop method until closed
Dialog3()
callback3() // stop method until closed
}
问题在于您无法停止 UI 线程。任何想法或解决方法将非常感激。
PS:这适用于 C 或 Objective C
回答
因此,在 Martin B 的帮助下发现了协程之后,我发现了这个页面:https://stackoverflow.com/posts/4746722/edit最终使用了这段代码:
define coRoutineBegin static int state=0; switch(state) { case 0:
define yield do { state=__LINE__; return;
case __LINE__:; } while (0);
define coRoutineEnd }
void process()
{
coRoutineBegin
Dialog1()
yield
Dialog2()
yield
Dialog3()
yield
Dialog4()
yield
coRoutineEnd
}
最佳答案
您正在寻找coroutines ,它准确地提供了您正在寻找的概念:从函数中产生控制而不退出它。本质上,您的代码将如下所示:
process()
{
Dialog1()
yield
Dialog2()
yield
Dialog3()
}
不幸的是,C 或 Objective C 本身不支持协程,并且在不诉诸丑陋的 hack 的情况下很难通用地实现。但是,您可以将此概念作为针对您的情况构建特殊案例的起点。
关于c - UI 编程中除了回调还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746722/