vs2005跨线程的问题.

问题描述

一个多线程的程序.是在form1里面生成前50个质数的题,发现在VS2005里面运行出错,提示错误:跨线程调用windows窗体控件.但是把代码复制到VS2003上运行就没有这个错误,请问是为什么?需要修改什么?代码如下.谢谢各位了,小弟初学c#namespaceThreadDemo{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}publicvoidGenerate(){boolIsPrime=true;intcount=2;lstPrime.Items.Add(2);for(inti=0;count<50;i+=2){IsPrime=true;for(intj=2;j<=(i/2);j++){if(i%j==0){IsPrime=false;break;}}if(IsPrime){lstPrime.Items.Add(i);count++;Thread.Sleep(100);}}btnStart.Enabled=true;btnPause.Enabled=false;btnStop.Enabled=false;btnResume.Enabled=false;}privateThreadprimeThread;privatevoidbtnStart_Click(objectsender,EventArgse){primeThread=newThread(newThreadStart(Generate));primeThread.Name="质数";btnPause.Enabled=true;btnStart.Enabled=false;btnStop.Enabled=true;primeThread.Start();}privatevoidbtnStop_Click(objectsender,EventArgse){primeThread.Abort();}}}

解决方案

解决方案二:
调用控件的线程和控件UI所在的线程不是同一个线程时就会这样.这种时候应该使用控件的Invoke方法.
解决方案三:
多线程异步操作时,在辅助线程调用的工作方法上不应调用任何在主线程创建的UI控件,这是一条原则。
解决方案四:
改成这样(其它窗体操作类似)if(lstPrime.InvokeRequired)lstPrime.BeginInvoke(newEventHandler(添加),i);//i即为"添加"的s,无参数可不填void添加(objects,EventArgse){lstPrime.Items.Add(s);}
解决方案五:
LS都对,用BeginInvoke或Invoke回到UI线程上
解决方案六:
谢谢大家,请问怎么加分啊。....

时间: 2024-11-08 23:27:23

vs2005跨线程的问题.的相关文章

跨线程 调试-c# 多线程的一个问题请各位多多指点

问题描述 c# 多线程的一个问题请各位多多指点 小弟刚刚学习c#多线程的知识,今天测试一个简单的windows窗口程序,程序主要内容为: private void add_item() { for (int i = 0; i < 100000; i++) { this.listBox1.Items.Add(i.ToString() + " aa "); } } private void button1_Click(object sender, EventArgs e) { Thr

编程-c#,winform跨线程更改ui组件,出错,求大神帮帮忙

问题描述 c#,winform跨线程更改ui组件,出错,求大神帮帮忙 以下是截图: 源码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windo

股票网站上,一人打开多个网页,浏缆不同的股票曲线,股票曲线10秒刷新一次,使用啥技术实现的啊?session是不能跨线程的?

问题描述 股票网站上,一人打开多个网页,浏缆不同的股票曲线,股票曲线10秒刷新一次,使用啥技术实现的啊?session是不能跨线程的? 解决方案 解决方案二:ajaxflash解决方案三:这不就是传说中的"ajax"么...解决方案四:我是问数据是如何跟综到每个网页的?解决方案五:泛:你这用AJAX就可以了细:你Y的这是一个小项目了解决方案六:我是问数据是如何跟综到每个网页的?=================概念性错误.不是数据跟踪网页,是网页请求数据.解决方案七:zddasdasd

c#Sytem.Threading.Timer线程TimerCallBack委托中方法涉及访问ui成员用考虑跨线程安全问题吗

问题描述 publicpartialclassScreen1{privateSystem.Threading.Timert1;voidScreen1_Opened(System.Objectsender,System.EventArgse){t1=newSystem.Threading.Timer(newTimerCallback(countTimer),null,0,1000);//定时器线程}voidcountTimer(objectob){this.Text1.Text="hello&qu

请问MFC跨线程能不能调用对方线程里正在运行的函数?

问题描述 请问MFC跨线程能不能调用对方线程里正在运行的函数? 请问MFC跨线程能不能调用对方线程里正在运行的函数?怎么得到当前正在运行的线程运行的是哪一个函数的函数名?谢谢 解决方案 可以让每个线程在执行自己的时候先将函数名放在全局变量中,这样可以通过别的线程进行检索. 解决方案二: 如何在c语言中调用一个函数,使其运行在NSRunLoop的线程中一个函数能否被两个线程同时调用

C# 跨线程调用控件

原文:C# 跨线程调用控件 在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法   阅读目录 线程间操作无效 第一种办法:禁止编译器对跨线程访问做检查 第二种办法: 使用delegate和invoke来从其他线程中调用控件 第三种办法: 使用delegate和BeginInvoke来从其他线程中控制控件 第四种办法: 使用BackgroundWorker组件 源代码下载   线程间操作无效

多媒体定时器和跨线程更新窗口学习总结

总结了一些关于多媒体定时器的使用和处理跨线程更新窗口的原理和方法 微软在32位版本的系统里提供了一组所谓的"多媒体定时器"API,多媒体定时器可以使应用程序最大限度的获得硬件平台支持的定时精度.可以实现高精度的定时,例如可以应用于 MIDI序列发生器,MIDI时间产生的精度在一毫秒之内. 一.多媒体定时器的使用方法设置多媒体定时器timeSetEvent()函数,定时精度为ms级.利用该函数可以实现周期性的函数调用.1.函数的原型如下: MMRESULT timeSetEvent( U

MFC跨线程调用另一个线程函数执行的函数

问题描述 MFC跨线程调用另一个线程函数执行的函数 MFC跨线程调用另一个线程函数执行的函数,怎么得到函数的返回值呢?函数名转换函数值 解决方案 http://blog.csdn.net/hebezai/article/details/3529736 解决方案二: 跨线程调用MFC成员函数

C#多线程、跨线程与线程安全的示例详解

C#多线程.跨线程与线程安全的示例详解(三种不同方法)  代码如下 复制代码 using System.Threading; public static class Extensions     {         //控件扩展方法(用于跨线程操作),因为为了线程的安全,防止资源竞争出现死锁或不一致的状态,.NET是不允许进行跨线程访问窗体控件的.         public static void SafeCall(this Control ctrl, Action callback)