C#winform多线程问题,求救

问题描述

C#winform多线程问题,求救
C#winform多线程,有6000条数据,分别根据ID查询,把信息导出excel,开100个线程同时查询,线程没走完就导出了,就没有那么多条数据,怎么办?求救
CountdownEvent handler = new CountdownEvent(100);
for (int i = 0; i < 100; i++)
{
Thread Thd = new Thread(() =>
{
DateTime staTime = DateTime.Now;
for (int j = i * (match_3.Count / 100); j < (i + 1) * (match_3.Count / 100); j++)
{
FlightInfo flight = GetAriInfo(match_3[j].Groups[2].Value);
flist.Add(flight);
}
});
Thd.Name = i.ToString();
Thd.Start();
Thread.Sleep(1000); //wait 1 seconds to do something
handler.Signal();
}
handler.Wait();
//线程走完了执行的代码

解决方案

其实不用这样做,直接用linq的parallel就行,这个是系统的并行方法,比自己写的要好的多。

解决方案二:
有那么麻烦么,直接引 EPPlus ,然后按照要求导出即可。。。

时间: 2024-10-27 12:41:11

C#winform多线程问题,求救的相关文章

C# WinForm多线程开发(二) ThreadPool 与 Timer

原文地址:点击打开链接 [摘要]本文介绍C# WinForm多线程开发之ThreadPool 与 Timer,并提供详细的示例代码供参考. 本文接上文,继续探讨WinForm中的多线程问题,再次主要探讨threadpool 和timer. 一 .ThreadPool 线程池(ThreadPool)是一种相对较简单的方法,它适应于一些需要多个线程而又较短任务(如一些常处于阻塞状态的线程),它的缺点是对创建的线程不能加以控制,也不能设置其优先级.由于每个进程只有一个线程池,当然每个应用程序域也只有一

c# winform 多线程使用的问题 多线登录new新窗体的时候 报错

问题描述 c# winform 多线程使用的问题 多线登录new新窗体的时候 报错 c# winform 多线程使用的问题 多线登录new新窗体的时候 Thread Thr=new Thread(new ThreadStart(test1)) Thr.Start(); public void test1() { form1 for=new form1(); for.show(); } 报 线程间操作无效: 从不是创建控件"lts"的线程访问它.如何解决呢 解决方案 up 习惯用委托去解

c# winform 多线程调用信息窗体

问题描述 c# winform 多线程调用信息窗体 想做一个多线程任务中的信息提示窗体.即在执行任务的过程中,如果一个线程需要向外界输出信息,那么就显示该信息窗体,并在窗体上显示信息内容,可以点击一个按钮关闭该窗体.如果其中一个线程调用了该窗体显示信息后没有关闭,其他线程调用该窗体时,则在原信息窗体上补充显示新的信息. 请各位大虾出手相助! 解决方案 可以使用自定义消息,多线程只向消息队列提交消息,信息窗体根据消息来处理显示问题

C# WinForm多线程开发(三) Control.Invoke

原文地址:点击打开链接 [摘要]本文介绍C# WinForm多线程开发之Control.Invoke,并提供详细的示例代码供参考. 下面我们就把在Windows Form软件中使用Invoke时的多线程要注意的问题给大家做一个介绍. 首先,什么样的操作需要考虑使用多线程?总的一条就是,负责与用户交互的线程(以下简称为UI线程)应该保持顺畅,当UI线程调用的API可能引起阻塞时间超过30毫秒时(比如访问CD-ROM等速度超慢的外设.进行远程调用等等)就应该考虑使用多线程.为什么是30毫秒?30毫秒

C# WinForm多线程开发(一) Thread类库

原文地址:点击打开链接 [摘要]本文介绍C# WinForm多线程开发之Thread类库,并提供简单的示例代码供参考. Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程.什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不

我使用C#winform 多线程自动定时弹出新窗体,但是窗体一直忙

问题描述 我使用C#winform多线程自动定时弹出新窗体,但是窗体一直忙.我比如定时5秒钟弹出一个新窗体,但是一直都是忙的状态,我无法对新窗体操作,即使改为1分钟弹一次也没有办法,怎么办? 解决方案 解决方案二:面对这样的提问方式,我只能回答:凉拌解决方案三:如果线程不是UI主线程的话,操作窗体需要用委托调用的,你可以用异步委托,到时间就弹出一个窗体解决方案四:代码如下Form1frm;privatevoidbutton1_Click(objectsender,EventArgse){vart

winform 多线程,谁帮我解决一个问题

问题描述 窗体信息:1.winform窗体上有[ListView1.txtWeb1.txtWeb2.txtWeb3]几个控件.省略其它控件2.[ListView1]里的每一行数据都是要拿出来对网络请求.每一行数据的某一列是一个URI功能要求是:间隔一秒对[ListView1]检查数据.如果有1条或者N条:分别创建最多3个线程..第一个线程对网络访问的数据显示在txtWeb1上并且在ListView1中删除当前执行的一行数据.txtWeb2为第二个线程访问的数据.txtWeb3为第三个线程访问的数

winform 多线程如何刷新控件,在线等.....

问题描述 在一个form中有listbox控件,在form启动后,自动执行多线程,在线程中不时刷新listbox控件.在常见的例子中,多线程是一个form类中函数,所以在多线程中可以看见listbox,之后进行委托即可,但是我现在要执行的多线程是另一个类中的函数(添加了新类mythread),在这个类中listbox不可见,无法委托,要是formn=newform();xxx+=newmydelegate(n.setlistbox);,不是刷新原来的listbox控件,是新建一个form(n),

winform 多线程中ShowDialog()步骤无效的解决办法

private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(remind); thread.IsBackground = true; thread.Start(); } private void remind() { while (true) { string h = "0"; string m = "23"; if (h == DateTime.Now.Hour.