完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
    * 主體類型
    * 企業(yè)名稱
    * 信用代碼
    * 所在行業(yè)
    * 企業(yè)規(guī)模
    * 所在職位
    * 姓名
    * 所在行業(yè)
    * 學(xué)歷
    * 工作性質(zhì)
    請(qǐng)先選擇行業(yè)
    您還可以選擇以下福利:
    行業(yè)福利,領(lǐng)完即止!

    下載app免費(fèi)領(lǐng)取會(huì)員

    NULL

    ad.jpg

    二次開發(fā)教程:Revit開發(fā)之多線程

    發(fā)布于:2019-08-23 17:05:28

    網(wǎng)友投稿

    更多

    關(guān)于Revit開發(fā)其實(shí)是可以使用多線程的,但是是有限制的,目前發(fā)現(xiàn)只要在其他線程里啟用Transaction,基本Revit就崩潰了,


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


    比較長(zhǎng),這種情況我們就可以把檢索的任務(wù)給其他線程,然后用戶先可以先進(jìn)行其他操作,


    下面說一個(gè)簡(jiǎn)單的例子,在Task里檢索建筑柱的數(shù)量,然后顯示到Window里,但是檢索數(shù)量的時(shí)候,用戶可以在Window里進(jìn)行


    其他數(shù)據(jù)的輸入:




    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="柱子的數(shù)量為:" 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();

            }

        }

    本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

    未標(biāo)題-1.jpg

    上一篇:二次開發(fā)教程:WPF通過異常來驗(yàn)證用戶輸入

    下一篇:二次開發(fā)教程:Revit開發(fā)將WPF的Ower設(shè)置為Revit窗體

    60acb4e0ef112.png
    主站蜘蛛池模板: 国模无码人体一区二区| 国产精品一区电影| 精品一区二区三区视频| 国产一区二区三区韩国女主播| 中文字幕亚洲乱码熟女一区二区| 日韩精品无码免费一区二区三区 | 在线日产精品一区| 91一区二区三区| 搜日本一区二区三区免费高清视频| 亚洲av无码片区一区二区三区| 国产日韩一区二区三免费高清| 狠狠爱无码一区二区三区| 国产一区二区好的精华液| 精品爆乳一区二区三区无码av| 亚洲AV福利天堂一区二区三| 黑人大战亚洲人精品一区| 中文国产成人精品久久一区| 香蕉久久AⅤ一区二区三区 | 国产一区二区三区精品视频| 一区二区三区视频观看| 亚洲AV日韩精品一区二区三区| 国产精品免费综合一区视频| 天天躁日日躁狠狠躁一区| 精品国产一区二区三区久| 国产精品一区二区毛卡片| 成人精品一区二区三区电影| 日韩精品国产一区| 精品一区二区三区影院在线午夜| 男人的天堂亚洲一区二区三区| 日本免费一区二区三区最新| 精品一区精品二区| 丝袜无码一区二区三区| 亚洲AV无码一区东京热久久 | 无码一区二区三区在线观看| 亚洲AV无码第一区二区三区| 久久久精品人妻一区二区三区蜜桃| 老熟妇仑乱一区二区视頻| 亚洲熟妇AV一区二区三区宅男| 成人h动漫精品一区二区无码| 日韩十八禁一区二区久久| 在线观看国产一区|