91手机视频在线-91手机视频在线观看-91手机在线-91手机在线播放-91手机在线观看

完善主體資料,免費贈送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窗體

主站蜘蛛池模板: 永久免费视频网站在线观看 | 免费能直接在线观看黄的视频 | 国产伦精品一区二区三区网站 | 日韩欧美特一级大黄作a毛片免费 | 国产精品欧美日韩精品 | 国产美女一区二区在线观看 | 国产免费女同性视频网站 | 国产精品吹潮在线播放 | 国产精品白嫩在线观看 | 午夜影视污| 亚洲三级视频 | 亚洲视频在线观看网址 | 一级毛片免费不卡 | 欧美日韩免费 | 亚洲涩涩涩 | 尤物蜜芽福利国产污在线观看 | 亚洲不卡视频在线观看 | 黄色免费播放 | 小明www永久免费播放平台 | 欧美精品一区二区三区在线播放 | 亚洲人成网站999久久久综合 | 午夜免费福利不卡网址92 | 射丝袜视频 | 亚洲日b| 国产精品久久久久久麻豆一区 | 999精品久久久中文字幕蜜桃 | 久久不射网站 | 国产麻豆剧传媒精品国产免费 | 日韩视频在线观看免费 | 91视频免费观看高清观看完整 | 日本hdxxxxx护士免费的 | 亚洲一区日韩二区欧美三区 | 五月一区二区久久综合天堂 | 日韩激情在线 | 看真人视频一级毛片 | 在线中文天堂 | 看片地址| 男女交性粗大视频播放 | 久久久精品中文字幕 | 黄色片日本网站 | 在线观看精品国内福利视频 |