c# - 只要函数 B 在 C# (控制台应用程序)中执行,如何运行函数 A
问题描述
编辑:根据评论中的建议,我将列出 A 和 B 的实际功能以及我想要实现的目标。
我正在尝试在 C# 控制台应用程序中创建加载动画。函数 A 重复(因此为什么为真)在屏幕上绘制字符(动画),而函数 B 在后台执行一些代码。
因此,一旦功能 B 完成,我需要功能 A 停止,因为那是程序“加载”的时候。
我有两个功能。
public static void A(){
while(true){//repeatedly do one thing}
}
public static void B(){
//do something
//do something
//do something
}
static void Main(string[] args) {//main func}
基本上,只要 B 正在运行,我就想执行 A(因为它是一个 while 循环)。一旦 B 完成执行其代码,A 将停止执行。
我已经尝试过 Parallel.Invoke 但问题是 Parallel.Invoke 等待将等待两个函数在它停止之前完成执行。由于函数 A 是一个永无止境的循环,Parallel.Invoke 也永远不会结束。
提前感谢任何建议。
解决方案
上述答复表示赞赏。但是,我认为我找到了一种更简单的方法,至少对于我正在尝试做的事情。我将把它留在这里以备将来参考,以防有人尝试这样做。
我通过多线程解决了这个问题。我将函数 A 作为子线程启动,然后在主线程中执行函数 B。函数 B 完成后,我终止了包含函数 A 的子线程。代码如下所示:
ThreadStart funcA = new ThreadStart(functionA);
Thread funcAThread = new Thread(funcA);
funcAThread.Start();
functionB();
funcAThread.Stop();
这可能不适用于每种情况,但如果您只想在代码在后台执行时打印一些加载动画,这是(据我所知),最简单的方法,代码行数最少。
推荐阅读
- google-analytics - Google OAuth 同意屏幕的值是什么?
- sql-server - SQL Server:过程抛出批处理错误
- javascript - 弹跳可拖动球
- r - 如何在 Shiny App 中使用带有反应数据框和 R Highcharter 的反应列表
- android - 设置 Cloud Firestore/NoSQL 数据结构
- c# - 调用 ajax 时,.Net Core 2.2 Visual Studio 崩溃
- javascript - 更改 chrome.app 的语言区域设置?
- google-apps-script - 检查别名的剩余电子邮件配额
- swift - 每个 UICollectionView 单元格中的 UITableView
- solr - solr 中的 Facet 流表达式