Javascript Photoshop脚本-更新窗口中的进度条

Javascript Photoshop脚本-更新窗口中的进度条,javascript,photoshop,flash-cs5,adobe-scriptui,Javascript,Photoshop,Flash Cs5,Adobe Scriptui,我想为我的一个Photoshop脚本显示一个进度条。如果我在一个按钮点击事件中工作,那么我可以毫无问题地更新进度条 对于此脚本,不需要用户交互。我想: -显示窗口 -工作完成时更新进度条 -关上窗户 var win = new Window("dialog{text:'Progress',bounds:[100,100,400,150],\ bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};"); win.show();

我想为我的一个Photoshop脚本显示一个进度条。如果我在一个按钮点击事件中工作,那么我可以毫无问题地更新进度条

对于此脚本,不需要用户交互。我想: -显示窗口 -工作完成时更新进度条 -关上窗户

var win = new Window("dialog{text:'Progress',bounds:[100,100,400,150],\ bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");
win.show();

for(...){
    //do work here

    //update progress
    win.bar.value = ...;
}

win.close();
问题是,
win.show()阻塞,直到用户关闭窗口。我还尝试添加一个
onClose
处理程序,然后立即关闭窗口,但窗口从未显示


关于如何让进度条工作有什么想法吗?

窗口类
对话框是一个模式对话框,需要您在继续执行之前关闭它

使用类
窗口
创建非阻塞窗口:

var win = new Window("window{text:'Progress',bounds:[100,100,400,150],bar:Progressbar{bounds:[20,20,280,31] , value:0,maxvalue:100}};");
win.show();

for(...){
    //do work here

    //update progress
    win.bar.value = ...;
}

win.close();

但是,您将在这里遇到下一个问题。根据您在循环中的操作,photoshop更新UI的速度不够快,无法看到进度条移动。这就是我被卡住的地方:/

我曾经运行过WaitForRedraw代码段,也许它会使ps redraw用户界面变得更好? 没有时间检查,只是一个想法

function WaitForRedraw(){
var eventWait = charIDToTypeID("Wait")
var enumRedrawComplete = charIDToTypeID("RdCm")
var typeState = charIDToTypeID("Stte")
var keyState = charIDToTypeID("Stte")
var desc = new ActionDescriptor()

desc.putEnumerated(keyState, typeState, enumRedrawComplete)
executeAction(eventWait, desc, DialogModes.NO)
}

您可能想考虑使用App.RealSH()或WaITFReRebug()。有一个window.update(),但它似乎并没有为我解决这个问题


源代码如下:

每次增加该条强制进行UI更新时,请使用
win.update()。我认为从技术上讲,它不会强制windows更新,它只是使窗口无效,然后windows操作系统在有时间时会重新绘制(低优先级)。在慢速系统上,这将在循环完成后完成。。。