public partial class Form1 : Form //主窗体
{
private Thread THcon;//声明一个全局变量的线程
List<string> list = new List<string>(); //声明一个数组 public Form1()
{
InitializeComponent();
}
int i = 0; private void button1_Click(object sender, EventArgs e)//button1事件 用于像
{ listBox1.Items.Add(i);
i += 1;
THcon = new Thread(new ThreadStart(trust));
THcon.Start();
string State = THcon.ThreadState.ToString();
}
public void trust()//声明一个委托,目的是利用委托让子线程能够操作Form1中的控件
{
consum_class con = new consum_class();
MethodInvoker mi = new MethodInvoker(con.consum);//声明一个委托listBox1中添加数字
this.Invoke( mi); }
}
public class consum_class //创建一个消费者类,功能是将listBox1中的值放入listBox2中
{
public void consum()
{
lock (this)
{
if (listBox1.Items.Count == 0)
{
return; }
while (true)
{
int q = 0;
for (int j = 0; j < listBox1.Items.Count; j++)//跟新队列栈
{
string State = THcon.ThreadState.ToString();
list.Add(this.listBox1.Items[j].ToString());
} string b = list.Last();
for (int i = 0; i < 10000000; i++)//为了看清线程的运转过程,我故意做了个循环,延长了线程的取值时间
{ q += 1;
if (q == 10000000)
{
this.listBox2.Items.Add(b);
break;
}
}
break;
}
}
}
}
}
问题是使用了委托 也不能引用控件哦错误 CS0103: 当前上下文中不存在名称“listBox1”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(58,45): 错误 CS0103: 当前上下文中不存在名称“listBox1”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(60,44): 错误 CS0103: 当前上下文中不存在名称“THcon”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(61,29): 错误 CS0103: 当前上下文中不存在名称“list”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(61,43): 错误 CS1061: “dotNetAndThread2.consum_class”不包含“listBox1”的定义,并且找不到可接受类型为“dotNetAndThread2.consum_class”的第一个参数的扩展方法“listBox1”(是否缺少 using 指令或程序集引用?)
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(64,36): 错误 CS0103: 当前上下文中不存在名称“list”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(71,38): 错误 CS1061: “dotNetAndThread2.consum_class”不包含“listBox2”的定义,并且找不到可接受类型为“dotNetAndThread2.consum_cla
{
private Thread THcon;//声明一个全局变量的线程
List<string> list = new List<string>(); //声明一个数组 public Form1()
{
InitializeComponent();
}
int i = 0; private void button1_Click(object sender, EventArgs e)//button1事件 用于像
{ listBox1.Items.Add(i);
i += 1;
THcon = new Thread(new ThreadStart(trust));
THcon.Start();
string State = THcon.ThreadState.ToString();
}
public void trust()//声明一个委托,目的是利用委托让子线程能够操作Form1中的控件
{
consum_class con = new consum_class();
MethodInvoker mi = new MethodInvoker(con.consum);//声明一个委托listBox1中添加数字
this.Invoke( mi); }
}
public class consum_class //创建一个消费者类,功能是将listBox1中的值放入listBox2中
{
public void consum()
{
lock (this)
{
if (listBox1.Items.Count == 0)
{
return; }
while (true)
{
int q = 0;
for (int j = 0; j < listBox1.Items.Count; j++)//跟新队列栈
{
string State = THcon.ThreadState.ToString();
list.Add(this.listBox1.Items[j].ToString());
} string b = list.Last();
for (int i = 0; i < 10000000; i++)//为了看清线程的运转过程,我故意做了个循环,延长了线程的取值时间
{ q += 1;
if (q == 10000000)
{
this.listBox2.Items.Add(b);
break;
}
}
break;
}
}
}
}
}
问题是使用了委托 也不能引用控件哦错误 CS0103: 当前上下文中不存在名称“listBox1”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(58,45): 错误 CS0103: 当前上下文中不存在名称“listBox1”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(60,44): 错误 CS0103: 当前上下文中不存在名称“THcon”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(61,29): 错误 CS0103: 当前上下文中不存在名称“list”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(61,43): 错误 CS1061: “dotNetAndThread2.consum_class”不包含“listBox1”的定义,并且找不到可接受类型为“dotNetAndThread2.consum_class”的第一个参数的扩展方法“listBox1”(是否缺少 using 指令或程序集引用?)
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(64,36): 错误 CS0103: 当前上下文中不存在名称“list”
C:\Documents and Settings\test\My Documents\Visual Studio 2008\Projects\dotNetAndThread2\dotNetAndThread2\Form1.cs(71,38): 错误 CS1061: “dotNetAndThread2.consum_class”不包含“listBox2”的定义,并且找不到可接受类型为“dotNetAndThread2.consum_cla
解决方案 »
- 在电脑端和Windows Phone 7手机之间做一个实现QQ功能的聊天软件
- 一个关于逻辑表达式的问题
- 文件“bin\Debug\PMS.exe”正由另一进程使用
- 完成的网站也在网络上能访问了,怎么找存储过程
- 看看我的的代码错在哪儿?谢谢~
- new{}是什么意思
- 请问如何遍历WINFORM中的某一窗体上的的某个控件的所有的:方法,事件,属性,及其名称???
- 关于ListBox的问题?
- 如何向服务器发送请求,并得到返回值
- 两个win2000 server 如何级连接到internet ?
- c#用HttpWebRequest实现网络信息发送,出现乱码
- C# CrossThreadMessagingException TextBox引发
private delegate void CopyListItemCallBaCk();private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(CopyListItem));
t.Start();
}private void CopyListItem()
{
if (this.listBox1.InvokeRequired || this.listBox2.InvokeRequired) {
CopyListItemCallBaCk cb = new CopyListItemCallBaCk(CopyListItem);
this.Invoke(cb);
} else {
listBox2.Items.Clear();
foreach (object o in listBox1.Items) {
listBox2.Items.Add(o);
}
}
}
if(this.InvokeRequired)
{
this.invoke()
}
else
{}
{
control.Text = "test";
};
if (control.InvokeRequired)
{
control.Invoke(mi);
}
else
{
mi();
}
希望有所帮助
2楼我不光是跨线程那么简单了 我的“消费者”是在另一个类里(public class consum_class),和“Form”窗体对象不是在一个类里哦。