0

最近,我更新了我的Visual Studio並開始使用擴展的宏瀏覽器。如何在Visual Studio宏中提供時間延遲

我試圖使用一個示例宏「刪除和排序所有」,但我意識到如果我有一個打開的文檔,它不會運行。因此,我關閉了所有打開的文檔,並再次嘗試打開所有文檔並關閉它們,但它也不起作用。

問題是在文檔完全加載之前執行的命令。如果有事件或計時器可以幫助等待文檔加載完畢,問題就會解決。

這是我的代碼。標誌着我在這裏我要添加等待功能:

function formatFile(file) { 
    dte.ExecuteCommand("View.SolutionExplorer"); 
    if (file.Name.indexOf(".cs", file.Name.length - ".cs".length) !== -1) { 
     file.Open(); 
     file.Document.Activate(); 

//here i want to wait for 1 second 
     dte.ExecuteCommand("Edit.RemoveAndSort"); 

     file.Document.Save(); 
     file.Document.Close(); 
    } 
} 

我明白任何形式的幫助。

在GitHub上宏資源管理:https://github.com/Microsoft/VS-Macros

+0

感謝親愛@Peh。但據我所知,宏主要語言是vba。我錯了嗎? – David

+0

謝謝你們。我刪除了vba標籤。但我想這個問題本身就很清楚。 – David

+1

現在怎麼樣?好點嗎? – David

回答

1

根據代碼片段你在原來的職位共享,我也克隆從GitHub項目,你的代碼應該是JavaScript代碼。

在JavaScript代碼中,有setTimeout()或setInterval()函數。例如,如果使用setTimeout(),則需要將需要在暫停後運行的代碼移動到setTimeout()回調中。

請修改您的代碼,如下所示。

function formatFile(file) { 
dte.ExecuteCommand("View.SolutionExplorer"); 
if (file.Name.indexOf(".cs", file.Name.length - ".cs".length) !== -1) { 
    file.Open(); 
    file.Document.Activate(); 


    setTimeout(function() { 
     //move the code that you want to run after 1 second 
     dte.ExecuteCommand("Edit.RemoveAndSort"); 
     file.Document.Save(); 
     file.Document.Close(); 
    }, 1000); 

} 

並且在Javascript代碼中有很多關於sleep()的線程。請參考:

What is the JavaScript version of sleep()?

JavaScript sleep/wait before continuing

+0

@David你有沒有試過上面的代碼,結果如何?如有任何問題,請告訴我。 –

+0

感謝親愛的@ wendy。我試過你的代碼,但我發現這個例外: – David

+0

第32行:預期的對象。 – David