完善主體資料,免費贈送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永久无码精品一区二区国产| 国精产品一区一区三区MBA下载| 亚洲图片一区二区| 综合无码一区二区三区| 成人午夜视频精品一区| 亚洲AV无码一区二区乱子伦| 2022年亚洲午夜一区二区福利| 亚洲AV美女一区二区三区| 亚洲AV日韩综合一区| 国产精品无码一区二区在线观一| 无码一区二区三区免费| 国产成人一区二区三区高清| 成人影片一区免费观看| 亚洲欧美一区二区三区日产| 麻豆一区二区三区蜜桃免费| 精品无码日韩一区二区三区不卡| 国产在线第一区二区三区| 午夜一区二区免费视频| 国产在线一区二区杨幂| 国产伦精品一区二区三区免.费| 黑人一区二区三区中文字幕| 国产伦精品一区二区三区视频猫咪 | 蜜桃AV抽搐高潮一区二区| 日本一区二区三区不卡在线视频 | 亚洲香蕉久久一区二区| 亚洲Av无码国产一区二区| 乱人伦一区二区三区| 亚洲国产精品一区第二页| 亚洲一区二区三区成人网站| 国产一区韩国女主播| 精品无码日韩一区二区三区不卡 | 久久久一区二区三区| 无码一区二区三区老色鬼| 亚洲国产一区在线| 国产一区二区久久久| 天堂一区二区三区在线观看| 无码视频一区二区三区| 日韩精品一区二区三区毛片| 国产一区二区影院| 亚洲一区无码精品色| 亚洲线精品一区二区三区|