我做了一个随机显示消息的WinForms应用程序,用两个标签(lblMessage和lblMessageEnglish)实现持续移动的效果
private void Form1_Load(object sender, EventArgs e)
{
Thread obj = new Thread(new ThreadStart(Display));
obj.Start();
Thread objEnglish = new Thread(new ThreadStart(DisplayEnglish));
objEnglish.Start();
}
private void Display()
{
for(int i=1;i<=100000;i++)
{
Random objRandom = new Random();
int x = 0;
int y = 0;
x = objRandom.Next(400);
y = objRandom.Next(400);
lblMessage.Left = x;
lblMessage.Top = y;
Thread.Sleep(500);
}
}
private void DisplayEnglish()
{
for (int i = 1; i <= 100000; i++)
{
Random objRandom = new Random();
int x = 0;
int y = 0;
x = objRandom.Next(400);
y = objRandom.Next(400);
lblMessageEnglish.Left = x;
lblMessageEnglish.Top = y;
Thread.Sleep(300);
}
}
第一次可以正常执行,但以后就不行了!
我先结束这个进程,然后运行会出现“线程间操作无效: 从不是创建控件“Form1”的线程访问它”指向DisplayEnglish函数中的
lblMessageEnglish.Left = x;语句!
请教一下怎样处理!
private void Form1_Load(object sender, EventArgs e)
{
Thread obj = new Thread(new ThreadStart(Display));
obj.Start();
Thread objEnglish = new Thread(new ThreadStart(DisplayEnglish));
objEnglish.Start();
}
private void Display()
{
for(int i=1;i<=100000;i++)
{
Random objRandom = new Random();
int x = 0;
int y = 0;
x = objRandom.Next(400);
y = objRandom.Next(400);
lblMessage.Left = x;
lblMessage.Top = y;
Thread.Sleep(500);
}
}
private void DisplayEnglish()
{
for (int i = 1; i <= 100000; i++)
{
Random objRandom = new Random();
int x = 0;
int y = 0;
x = objRandom.Next(400);
y = objRandom.Next(400);
lblMessageEnglish.Left = x;
lblMessageEnglish.Top = y;
Thread.Sleep(300);
}
}
第一次可以正常执行,但以后就不行了!
我先结束这个进程,然后运行会出现“线程间操作无效: 从不是创建控件“Form1”的线程访问它”指向DisplayEnglish函数中的
lblMessageEnglish.Left = x;语句!
请教一下怎样处理!
解决方案 »
- 垃圾文件清理
- 有关socket编程
- C#控制台应用程序如何删除空格字符串大小写转换
- C#做文本编辑器时如何实现文本中插入图片?
- 代码填充
- CSDN的各位高手,小弟想请教一下C#中有哪些方便的快捷键可以提高编译速度!
- 以WebService方式整合门禁系统及人事系统的人员资料范例程序代码
- DATAGRID定位行,自动翻页?????
- 搞不懂CSDN,既然是.net技术,为啥要分成C#,VB.NET,ASP.NET,VC.NET等栏目呢?很多朋友是在C#,VB.NET里问的都是.NET类库里的问题呀.....为
- 数据导出到Excel,字符串格式问题
- sql 2000
- C#如何给水晶报表帮定数据下面是我的代码!!!·不过不行那位有给我个代码也行谢谢!大哥们指点下
我在Form1_Load事件中加上了这句话:
Control.CheckForIllegalCrossThreadCalls = false;