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

    主站蜘蛛池模板: 亚洲高清偷拍一区二区三区| 中文字幕久久久久一区| 亚洲毛片αv无线播放一区| 无码日韩人妻av一区免费| 乱人伦一区二区三区| 午夜AV内射一区二区三区红桃视| 国产在线一区二区| 亚洲日本中文字幕一区二区三区| 日韩一区精品视频一区二区| 丝袜无码一区二区三区| 国产精久久一区二区三区| 国产精品一区二区久久沈樵| 久久精品国内一区二区三区| 国产成人亚洲综合一区| 色久综合网精品一区二区| 日韩精品视频一区二区三区| 无码精品一区二区三区在线| 国产日韩AV免费无码一区二区| 国产精品一区二区三区99| 久久久久女教师免费一区| 久久无码一区二区三区少妇| 亚洲第一区精品日韩在线播放| 国产精品一区电影| 福利一区福利二区| 本免费AV无码专区一区| 国模无码一区二区三区不卡| 国模大尺度视频一区二区| 久久精品一区二区东京热| 无码少妇一区二区性色AV | 亚洲爽爽一区二区三区| 精品一区二区高清在线观看| 亚洲国产精品成人一区| 日韩人妻无码一区二区三区综合部| 国产成人一区在线不卡| 精品视频一区二区三区免费| 无码人妻精品一区二区三区99仓本 | 99久久无码一区人妻a黑| 蜜桃AV抽搐高潮一区二区| 国产成人av一区二区三区不卡| 国产精品污WWW一区二区三区 | 久久影院亚洲一区|