none
C# 线程间操作无效: 从不是创建控件lvsearchlist的线程访问它 RRS feed

  • 问题

  • 各位大侠!小弟初识多线程! 想开三个线程分别计算 加 减 乘 然后写进没一项
    请问如何在其他线程中使用主程序中的控件?
    代码如下:
    aa.png (4 KB)
    2010-4-17 09:30

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;

    namespace 线程间操作无效
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }
            Thread td1;
            Thread td2;
            Thread td3;
            int count;
            private void button1_Click(object sender, EventArgs e)
            {
                try
                {
                   
                        foreach (ListViewItem lvi in lvsearchlist.Items)
                        {
                            lvi.SubItems[2].Text = null;
                            lvi.SubItems[3].Text = null;
                            lvi.SubItems[4].Text = null;
                        }
                        count = lvsearchlist.Items.Count;


                        td1 = new Thread(new ThreadStart(jia));
                        td2 = new Thread(new ThreadStart(jian));
                        td3 = new Thread(new ThreadStart(cheng));
                        td1.Start();
                        td2.Start();
                        td3.Start();

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            /// <summary>
            /// 加
            /// </summary>
            private void jia()
            {
                try
                {
                    for (int i = 0; i < count; i++)
                    {

                        int tmpnum=int.Parse(lvsearchlist.Items.SubItems[0].Text);
                        int tmpnum1 = int.Parse(lvsearchlist.Items.SubItems[1].Text);
                        int result = tmpnum + tmpnum1;
                        lvsearchlist.CheckedItems.SubItems[2].Text = result.ToString();

                        lvsearchlist.Refresh();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            /// <summary>
            /// 减
            /// </summary>
            private void jian()
            {
                try
                {

                    for (int i = 0; i < count; i++)
                    {

                        int tmpnum=int.Parse(lvsearchlist.Items.SubItems[0].Text);
                        int tmpnum1 = int.Parse(lvsearchlist.Items.SubItems[1].Text);
                        int result = tmpnum - tmpnum1;
                        lvsearchlist.CheckedItems.SubItems[3].Text = result.ToString();

                        lvsearchlist.Refresh();
                    }

                  
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }
            /// <summary>
            /// 乘
            /// </summary>
            private void cheng()
            {
                try
                {

                   for (int i = 0; i < count; i++)
                    {

                        int tmpnum=int.Parse(lvsearchlist.Items.SubItems[0].Text);
                        int tmpnum1 = int.Parse(lvsearchlist.Items.SubItems[1].Text);
                        int result = tmpnum * tmpnum1;
                        lvsearchlist.CheckedItems.SubItems[3].Text = result.ToString();

                        lvsearchlist.Refresh();
                    }

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }



        }
    }
    2010年4月17日 1:35

答案

全部回复