完善主體資料,免費贈送VIP會員!
      * 主體類型
      * 企業名稱
      * 信用代碼
      * 所在行業
      * 企業規模
      * 所在職位
      * 姓名
      * 所在行業
      * 學歷
      * 工作性質
      請先選擇行業
      您還可以選擇以下福利:
      行業福利,領完即止!

      下載app免費領取會員

      NULL

      ad.jpg

      二次開發教程:Revit開發之多線程

      發布于:2019-08-23 17:05:28

      網友投稿

      更多

      關于Revit開發其實是可以使用多線程的,但是是有限制的,目前發現只要在其他線程里啟用Transaction,基本Revit就崩潰了,


      但是在其他線程里不啟用Transaction還是可以使用的,比如說我們要在Revit里檢索一些東西,但這些東西又很多,需要的時間


      比較長,這種情況我們就可以把檢索的任務給其他線程,然后用戶先可以先進行其他操作,


      下面說一個簡單的例子,在Task里檢索建筑柱的數量,然后顯示到Window里,但是檢索數量的時候,用戶可以在Window里進行


      其他數據的輸入:




      namespace MultiThreading

      {

          [Transaction(TransactionMode.Manual)]

          public class Class1:IExternalCommand

          {

              public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

              {

                  Document doc = commandData.Application.ActiveUIDocument.Document;

                  ViewModel vm = new ViewModel(doc);

                  if (vm.ShowWindow() ?? false)

                  { 

                      

                  }

                  return Result.Succeeded;

              }

          }



          public class ViewModel:ViewModelBase

          {

              public MainWindow win = null;

              public ViewModel(Document doc)

              {

                  Task task = new Task(() =>

                  {

                      Thread.Sleep(10000);//由于檢索太快,所以讓Task等待10秒

                      FilteredElementCollector temc = new FilteredElementCollector(doc);

                      temc.OfCategory(BuiltInCategory.OST_Columns).OfClass(typeof(FamilyInstance));

                      I = temc.Count();

                      CanExecute = true;

                  });

                  task.Start();

                  win = new MainWindow();

                  win.DataContext = this;

              }



              private bool canExecute = false;

              public bool CanExecute

              {

                  get

                  {

                      return canExecute;

                  }

                  set

                  {

                      canExecute = value;

                      base.RaisePropertyChanged(() => CanExecute);

                      base.RaisePropertyChanged(() => OK_Command);

                  }

              }



              private int? i = null;

              public int? I

              {

                  get

                  {

                      return i;

                  }

                  set

                  {

                      i = value;

                      base.RaisePropertyChanged(() => I);

                  }

              }

              public ICommand OK_Command

              {

                  get

                  {

                      return new RelayCommand(() => {

                          win.DialogResult = true;

                          win.Close();

                      },()=>CanExecute);

                  }

              }

              public ICommand Cancel_Command

              {

                  get

                  {

                      return new RelayCommand(() =>

                      {

                          win.DialogResult = false;

                          win.Close();

                      });

                  }

              }

              public bool? ShowWindow()

              {

                  return win.ShowDialog();

              }

          }

      }




      <Window x:Class="MultiThreading.MainWindow"

              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

              Title="MainWindow" Height="300" Width="300">

          <Grid>

              <Label Content="柱子的數量為:" HorizontalAlignment="Left" Margin="86,97,0,0" VerticalAlignment="Top"/>

              <Button Content="確定"  Command="{Binding Path=OK_Command}" HorizontalAlignment="Left" Margin="76,229,0,0" VerticalAlignment="Top" Width="75"/>

              <Button Content="取消" Command="{Binding Path=Cancel_Command}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="191,229,0,0"/>

              <TextBox HorizontalAlignment="Left" Height="23" Margin="180,101,-8,0" IsReadOnly="True" TextWrapping="Wrap" Text="{Binding Path=I,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top" Width="120"/>

              <TextBox HorizontalAlignment="Left" Height="23" Margin="156,169,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>

              <Label Content="其他輸入:" HorizontalAlignment="Left" Margin="86,165,0,0" VerticalAlignment="Top"/>

          </Grid>

      </Window>




          public partial class MainWindow : Window

          {

              public MainWindow()

              {

                  InitializeComponent();

              }

          }

      本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

      未標題-1.jpg

      上一篇:二次開發教程:WPF通過異常來驗證用戶輸入

      下一篇:二次開發教程:Revit開發將WPF的Ower設置為Revit窗體

      主站蜘蛛池模板: 国产一区二区三区免费| 日韩av片无码一区二区不卡电影| 久久一区不卡中文字幕| 八戒久久精品一区二区三区| 国产精品一区电影| 精品国产日韩亚洲一区| 人妻aⅴ无码一区二区三区| 精品国产精品久久一区免费式 | 无码国产精品一区二区免费式芒果| 色窝窝无码一区二区三区| 国产精品视频免费一区二区| 久久精品国产一区二区三区肥胖| 少妇一晚三次一区二区三区| 久久99精品免费一区二区| 精品无码国产AV一区二区三区| 无码一区二区三区老色鬼| 国产一区二区高清在线播放 | 国产麻豆媒一区一区二区三区| 亚洲熟女乱综合一区二区| 色天使亚洲综合一区二区| 亚洲电影唐人社一区二区| 久久一区二区明星换脸| 国产一区二区电影| 日本一区二区不卡视频| 国产成人一区二区三区在线| 中文字幕一区在线| 中文字幕精品亚洲无线码一区| 区三区激情福利综合中文字幕在线一区 | 丰满人妻一区二区三区视频| 亚洲AV综合色区无码一区爱AV | 波多野结衣一区二区三区88 | 亚洲av无码不卡一区二区三区| 九九久久99综合一区二区| 日韩免费一区二区三区| 中文字幕精品一区二区| 无码中文人妻在线一区| 国产成人精品一区二三区| 日韩精品电影一区亚洲| 国产午夜精品一区理论片| 精品无码人妻一区二区免费蜜桃| 精品欧洲av无码一区二区|