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的东西 就算用起了也会有未知的错误