完善主體資料,免費贈送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无码一区二区三区| 天堂Av无码Av一区二区三区| 亚洲国产一区在线| 国产午夜精品一区二区三区嫩草 | 免费无码VA一区二区三区| 国产精品成人99一区无码| 免费一本色道久久一区| 日本一区二区三区爆乳| 精品一区二区三区在线观看视频| 日韩一区二区三区在线精品| 久热国产精品视频一区二区三区| 中文字幕一区二区三区在线不卡| 国产一区二区三区在线观看影院| 午夜影院一区二区| 亚洲一区二区三区写真 | 亚洲AV成人精品一区二区三区| 99精品国产一区二区三区| 亚洲一区二区三区在线视频| 日本精品一区二区三区四区| 日韩精品无码人妻一区二区三区| 交换国产精品视频一区| 亚洲AV日韩综合一区| 精品一区二区ww| 日韩美女在线观看一区| 波多野结衣精品一区二区三区 | 成人精品一区二区三区电影| 中文字幕一区二区三区人妻少妇| 台湾无码一区二区| 精品国产一区二区三区色欲| 无码人妻一区二区三区兔费 | 免费高清在线影片一区| 国产一区二区三区在线电影| 亚洲午夜日韩高清一区| 国产一区视频在线| 午夜影院一区二区| 一区二区三区高清在线|