2016-08-24 3 views
1

Revit APIを使用してActiveUIDocumentを閉じる方法はありますか? Revit GUIから機能するActiveUIDocumentを閉じるために別のアドインを作成しましたが、アイドリングイベントハンドラからそのアドインを呼び出そうとすると何も起こりません。助けてください。アイドリングイベントハンドラからRevit API(2014)を使用してActiveUIDocumentを閉じる

 RevitCommandId id_built_in = RevitCommandId.LookupPostableCommandId(PostableCommand.SheetIssuesOrRevisions); 
    RevitCommandId addinID = RevitCommandId.LookupCommandId("1869A8A1-A239-41CF-9A79-96234D92DEF4"); 
    app.PostCommand(addinID); 

Addinnマニフェストファイル:いくつかの最終

<?xml version="1.0"?> 
<RevitAddIns> 
    <AddIn Type="Command"> 
    <Assembly>AddinExternalLauncher.dll</Assembly> 
    <ClientId>1869A8A1-A239-41CF-9A79-96234D92DEF4</ClientId> 
    <FullClassName>AddinExternalLauncher.AddinLauncher</FullClassName> 
    <Text>Addin External Launcher</Text> 
    <Description></Description> 
    <VisibilityMode>AlwaysVisible</VisibilityMode> 
    <VendorId>ADSK</VendorId> 
    <VendorDescription>Autodesk, www.autodesk.com</VendorDescription> 
    </AddIn> 
</RevitAddIns> 

private void CloseDoc(object obj) 
{ 
    SendKeys.SendWait("^{F4}"); 
} 

public Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements) 
{ 
    Threadpool.QueueUserWorkItem(new WaitCallback(Close)); 
    return Result.Succeeded;  
} 

コードがアイドルイベントハンドラ内からアドインを呼び出すために使用:以下

は私のアドインのコードですaddinを呼び出した後のジャーナル出力行:

' 1:< total bytes expanded: 35414988 
' 1:< ;EES;0;0;86;0;0;0;0;0;14; 
' 1:< 0 ModelServerState "Destroyed": Current server = "Not Queried", Model server = "", Model server state = "Not Applicable" 
' 1:< System (MB) [Available/Total ] [Revit Memory Usage (MB) ] 
' 1:< RAM Statistics:  3385/ 8040  623=InUse  629=Peak 
' 1:< VM Statistics: 8384617/8388607  536=InUse  542=Peak 
' 1:< ::9:: Delta VM: Avail -13 -> 8384597 MB, Used +28 -> 564 MB, Peak +21 -> 564 MB; RAM: Avail -26 -> 3360 MB, Used +41 -> 664 MB, Peak +36 -> 665 MB 
'E 24-Aug-2016 15:02:28.961; 1:< 
' [Jrn.File Input Information] COMMON.FILE_INPUT.FILE_TYPE: .rvt 013144064.000000 
' 0:< The Idling event callback used 53 seconds 
' 3:< ::10:: Delta VM: Avail -20 -> 8384577 MB, Used +6 -> 570 MB, Peak +6 -> 570 MB; RAM: Avail -2 -> 3358 MB, Used +3 -> 667 MB, Peak +1 -> 667 MB 
' 0.114085  4:<<From Parking Area: ;PERF;MISC;generating greps 
' 0:< ::10:: Delta VM: Avail +5 -> 8384583 MB, Used -13 -> 558 MB; RAM: Avail +2 -> 3361 MB, Used -7 -> 661 MB, Peak +0 -> 668 MB 
' 0.372841 1:<<;PERF;MISC;drawing/ALL_GAPS 0.258756/TurnOff_GAPs 74% 
'C 24-Aug-2016 15:02:29.386; 0:< idle0_doc 
'H 24-Aug-2016 15:02:29.386; 0:< 
Jrn.Directive "AllowPressAndDrag" _ 
     , 1 
' 0:< <<Begin build CT>> 
' 
'Edit mode: IDR_COMMON 
'Command: ID_BUTTON_SELECT 
'Category: 0 
'Bar list: 
' Dialog_Revit_DynamicLabelDBar 
' Dialog_Essentials_FilterSelectionNew 
'Presenter list: 
' PP_DebugTab_Binding_Demo 
'Product: Architecture 
' 
' 
'*********************************************************** 
'*********************************************************** 
'<<End build CT>> 

答えて

1

なぜアイドリングハンドラからメソッドを直接呼び出さないのですか?

あなたがいる間に、なぜThreadPoolではなくTaskを使用してみませんか?

これは同じことを実現し、未使用のパラメータを持つ余分なメソッドを持つよりもクリーンです。

+0

ありがとうございました。アイドリングイベントハンドラからSendKeysを直接呼び出すと、理由がわからないリビットアプリケーションがクラッシュしました。 – amit

1

Idlingイベントハンドラから外部コマンドを呼び出すと、何も起こりません。

アイドリングイベントハンドラは、Revitが何もする必要がない間に実行されます。

コマンドを実行する必要がある場合、Revitには何かがあるので、Idlingイベントハンドラは機能しません。

プログラムで外部コマンドの実行をトリガするために適切かつ唯一の方法は、POSTCOMMAND機能を介して、次のとおりです。

http://thebuildingcoder.typepad.com/blog/2013/10/programmatic-custom-add-in-external-command-launch.html

は、私はあなたのための問題を解決しcs1088の上記の答えと希望を好みます。

関連する問題