ExecuteCmd.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows.Forms;
  4. using Autodesk.Revit.DB;
  5. using Autodesk.Revit.UI;
  6. using SAGA.RevitUtils.Extends;
  7. using TSZ.RevitBaseDll.Extends;
  8. namespace SAGA.RevitUtils.Windows
  9. {
  10. public class ExecuteCmd
  11. {
  12. private static TIdlingExternalEvent _externalEventObject;
  13. public static void ExecuteCommand(ExecuteCommandHandler executeHandler)
  14. {
  15. RaisedCallback callback = null;
  16. try
  17. {
  18. if (callback == null)
  19. {
  20. callback = param0 => executeHandler();
  21. }
  22. ExternalEventObject.Raise(callback);
  23. }
  24. catch (Exception exception)
  25. {
  26. MessageShow.Show(exception, false, "");
  27. }
  28. }
  29. public static void ExecuteCommandOnce(ExecuteCommandHandler executeHandler, ExecuteCommandHandler executeHandlerCallBack)
  30. {
  31. if (executeHandler == null)
  32. {
  33. throw new ArgumentNullException("executeHandler");
  34. }
  35. if (executeHandlerCallBack == null)
  36. {
  37. throw new ArgumentNullException("executeHandlerCallBack");
  38. }
  39. try
  40. {
  41. bool isRuned = false;
  42. Timer timer = new Timer {
  43. Interval = 2
  44. };
  45. timer.Tick += delegate (object sender, EventArgs e) {
  46. if (isRuned)
  47. {
  48. timer.Stop();
  49. executeHandlerCallBack();
  50. }
  51. };
  52. timer.Start();
  53. ExternalEventObject.Raise(delegate (ExternalEventExecuteEventArgs param0) {
  54. executeHandler();
  55. isRuned = true;
  56. });
  57. }
  58. catch (Exception exception)
  59. {
  60. MessageShow.Show(exception, false, "");
  61. }
  62. }
  63. public static void RevitCommand(PostableCommand cmd)
  64. {
  65. ExecuteCommandOnce(delegate {
  66. Application.DoEvents();
  67. ExternalDataWrapper.Current.UiApp.PostCommand(cmd);
  68. Application.DoEvents();
  69. return Result.Succeeded;
  70. }, () => Result.Succeeded);
  71. }
  72. private static TIdlingExternalEvent ExternalEventObject
  73. {
  74. get
  75. {
  76. if ((_externalEventObject == null) || _externalEventObject.Disposeed)
  77. {
  78. TszExternalEventHandler handler = new TszExternalEventHandler();
  79. _externalEventObject = TIdlingExternalEvent.Create(handler);
  80. }
  81. return _externalEventObject;
  82. }
  83. }
  84. public delegate Result CurveDrawnHandler(List<Curve> clist);
  85. public delegate Result ExecuteCommandHandler();
  86. }
  87. }