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窗體

主站蜘蛛池模板: 在线一区播放 | 欧美日本亚洲国产一区二区 | 亚欧在线精品免费观看一区 | 国产精品电影久久 | 网站在线观看高清免费 | 97国产大学生情侣11在线视频 | 亚洲美女综合网 | 国产片毛片 | 国产在线观看福利一区二区 | 亚洲精品不卡午夜精品 | 国产高清在线观看麻豆 | 妖精视频免费入口 | 国产白领丝袜办公室在线视频 | 婷婷色在线观看 | 久久中文在线 | 特黄aaaaaaaaa真人毛片 | 午夜激情在线观看 | 欧美叼嘿 | 国产成人亚洲综合a∨婷婷 国产成人亚洲综合无 | 国产99视频在线观看 | 国产成人免费在线观看 | 开心午夜婷婷色婷在线 | 免费高清毛片在线播放视频 | 黄色网网址 | 欧美一级毛片免费观看视频 | 国产免费麻豆 | 国产欧美综合在线观看第七页 | 日本aaaa精品免费视频 | 美女白丝超短裙被输出动态图 | 91啦在线视频 | 日本不卡高清中文字幕免费 | 成人久久网 | 亚洲精品国产一区二区三区四区 | 欧美黄www免费| 久久最新免费视频 | 欧美日韩不卡中文字幕在线 | 成年超爽大片免费视频播放 | 欧美黑寡妇香蕉视频 | 日韩在线手机看片免费看 | 久久综合草| 中国免费毛片 |