如何在vscode中实现忙碌指示器?

迈克·李施克

对于长时间运行的过程,我想在Visual Studio Code中显示繁忙的指示器。像打字稿扩展名这样的使用已经足够了:

在此处输入图片说明

但是,使用正常状态栏项目无法正常工作。在开始操作之前,我什至无法显示该项目,因为它似乎需要为此将控制权返回给vscode。

我试过的是:

...
busyIndicator = window.createStatusBarItem(StatusBarAlignment.Left, 1000);
busyIndicator.text = "##";
busyIndicator.show();

...

workspace.onDidSaveTextDocument((doc: TextDocument) => {
    if (doc.languageId === "antlr") {
        //busyIndicator.show();
        busyIndicator.text = "X";
        let tempPath = Utils.createTempFolder();
        let result = backend.generate(doc.fileName, { outputDir: tempPath, listeners: false, visitors: false });
        Utils.deleteFolderRecursive(tempPath);
        //busyIndicator.hide();
        busyIndicator.text = "Y";
    }
});

操作结束(如预期)时,从不显示X值,并且出现Y值。如果连简单的文本更新都行不通,我怎么还可以显示动画?

阿莱夫尼亚尼

没有与之类似的已发布API Tasks(在StatusBar中显示旋转状态)。但是,查看VSCode源代码,特别是task.contributions.ts您可以看到它组合setIntervalEventEmitter处理进度状态栏更新

的WebPack进展扩展是如何做到这一点的好例子。

基本上,您必须创建要更新StatusBar的时间间隔。这是您的backend过程监控:

initializeWacher() {
    this.timer = setInterval(() => {
        this.progress++;
        fs.stat(tempPath, (err, state) => {
            if(err && err.code === "ENOENT") {
                this.emit("progressFinish")
            } else {
                this.emit("progressChange", this.percentage)
            }
        });        
    }, 300);
}

处理时间间隔发出的事件:

watcher.initializeWacher();
watcher.on("progressChange", (progress) => {
    progress.updateProgress(progress);
});
watcher.on("progressFinish", () => {
    progress.finishProgress();
    watcher.dispose();
});

并在事件发生时(旋转本身)更新StatusBar:

private static progressChars: string = '|/-\\';
...
updateProgress(percentage) {
    ...
    let index = percentage % BusyIndicatorItem.progressChars.length;
    let chars = BusyIndicatorItem.progressChars.charAt(index);
    busyIndicator.text = "Backend processing " + chars;
}

finishProgress() {
    this.statusBarItem.text = "Backend finished";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在闪亮的应用程序中显示忙碌指示器?

如何使Flex忙碌指示器提前加载?

是否可以在智能表中隐藏忙碌指示器?

旁边/外部按钮旁边的元素后的伪指示器中的忙碌指示器

如何在Web视图中实现进度指示器?

忙碌指示器不显示

页面加载时忙碌指示器

如何实现RESTful进度指示器?

如何在颤振中显示进度指示器?

Flutter:如何在ListView中添加滚动指示器

如何在纸张输入中添加必需的指示器

如何在Docky中添加Workspace Switcher指示器?

如何在Python中编写Unity系统指示器?

如何在SingleChildScrollView中添加或启用位置指示器

如何在bokeh中创建加载指示器?

如何在WebView Flutter中显示加载指示器?

SwiftUI如何在WKWebView中添加活动指示器?

Bootstrap:如何在轮播指示器中显示文本?

如何在Vim中隐藏空格指示器

在长时间运行时如何显示忙碌指示器?

如何在Material-UI v1中实现自定义选项卡指示器颜色

为执行的过程创建等待/忙碌指示器

SAPUI5忙碌指示器-更改标准颜色?

如何在 TabLayout 中获取圆形标签指示器以填充圆形标签指示器背景?

相机对焦时如何实现视觉指示器

如何在http调用角度中设置加载器指示器

如何在astuetz / PagerSlidingTabStrip中添加按效果或选择器指示器?

滚动时如何在NSTableview中显示滚动指示器,不滚动时如何隐藏

如何在GNOME 3中的Ubuntu 17.10及更高版本中隐藏键盘布局指示器?