Ejemplo n.º 1
0
 private void screenShot()
 {
     if (!Directory.Exists(dstPath + @"\截图"))
     {
         Directory.CreateDirectory(dstPath + @"\截图");
     }
     mg.setFields(@"D:\三个区\无标题.mxd", shpPathText.Text, dstPath + @"\截图", labelItems, 15, ref axMapControl1);
     mg.outPut();
     return;
 }
Ejemplo n.º 2
0
        private void button1_Click(object sender, EventArgs e)
        {
            //
            for (int i = 0; i < checkedListBox1.Items.Count; ++i)
            {
                if (checkedListBox1.GetItemChecked(i))
                {
                    labelItems.Add(checkedListBox1.Items[i].ToString());
                }
            }
            //Thread fThread = new Thread(new ThreadStart(SleepT));
            //fThread.Start();

            //Thread workThread = new Thread(new ParameterizedThreadStart(WorkProc));
            //workThread.Start(mg);


            //Thread pThread = new Thread(new ParameterizedThreadStart(progressTest));
            //pThread.Start(mg);

            /*
             * 2019年3月8日11时,多线程显示进度条功能,残念。。。
             * 因为ArcObjects都被标记为STA,即单线程套间,每个STAs受限于一个线程,但是COM对于每个进程内的STA没有限制.
             * 但一个方法调用进入一个STA时,该方法被迁移至STA中唯一的线程中,因此,一个STA中的对象一次将只能接受和处理
             * 一个方法调用,它接受的每个方法调用都将会到达同一个线程中。(摘自Arcgis官网)
             *
             * 因此,尽管我新建了子线程,但仍然需要等待父线程结束执行截图方法后,才会执行进度条任务。且委托方法不能进行引用。
             *
             * 学习到了委托、匿名方法、lambda方法、泛型委托Fun<>,子线程中创建控件时,使用beginInvoke方法将该控件归到父线程中.
             * CheckForIllegalCrossThreadCalls=false 方法可以修改子线程中的空间。
             * 限于自己目前知识有限,对于多线程编程还是不够了解,就留在这里吧,以后有机会再处理。不过应该是没机会了。。。
             */

            mg.setFields(textBox2.Text, textBox3.Text, textBox9.Text, labelItems, Convert.ToInt16(textBox8.Text),
                         ref axMapControl1, Convert.ToInt16(textBox5.Text), Convert.ToInt16(textBox6.Text));
            mg.outPut();
            MessageBox.Show("完成截图!");
        }