首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c#线程有关问题

2011-12-31 
c#线程问题 高手指点我启动一个线程要让线程具有让listBox上显示该进程的优先级别可是老是出错说listBox不

c#线程问题 高手指点
我启动一个线程   要让线程具有让listBox上显示该进程的优先级别   可是老是出错   说listBox不是由线程创建的   没权限访问     高手解决下谢谢了     急!!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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;
using   System.Diagnostics;  

namespace   程序
{

   
        public   partial   class   ChildForm8   :   MainForm
        {
                public   ChildForm8()
                {
                        InitializeComponent();
                }

                public   void   DisplayNumbers()//线程显示数据方法
                {
                        Thread   thisthread   =   Thread.CurrentThread;
                        MessageBox.Show(thisthread.Name   +   thisthread.Priority.ToString());
                      listBox3.Items.Add(thread1.Priority);//??????????????????这里为什么不能实现??

                       
                }
               
                private   void   ChildForm8_Load(object   sender,   EventArgs   e)
                {
                       
                }

                private   void   ChildForm8_FormClosed(object   sender,   FormClosedEventArgs   e)
                {
                        BaseForm.num[7]   =   0;
                }

             
                private   void   button7_Click(object   sender,   EventArgs   e)
                {
                        ThreadStart   startDelegate   =   new   ThreadStart(DisplayNumbers);//线程关联显示数据方法委托
                        Thread   thread1   =   new   Thread(startDelegate);
                        thread1.Name   =   "我是最高优先级线程 ";
                        thread1.Priority   =   ThreadPriority.Highest;
                        thread1.Start();


                }




[解决办法]
给你的类增加一个Delegate成员
public delegate void DelegateDisplayNumbers();


DisplayNumbers 方法要改进以下

public void DisplayNumbers()//线程显示数据方法
{
//先判断是否需要Invoke
if(listBox3.InvokeRequired)
{
listBox3.BeginInvoke(new DeletegateDisplayNumbers(this.DisplayNumbers), new object[0]);
return;
}

listBox3.Items.Add(thread1.Priority);


}
[解决办法]
UI控件的修改,必须由创建他的线程来执行。..

微软的错误信息已经说得很明白了.

你在另一个线程里修改主线程创建的控件,当然出错.

Control.Invoke方法,就是应用到多线程里的
[解决办法]
什么叫命名控件, 命名控件应该是在程序编写时候命名
[解决办法]
非UI的线程不要用UI的东西 就算用起了也会有未知的错误

热点排行