我现在有两个方法,
方法一:读数据,
public string[] SetData(string s,int s2)
{}
方法二:分析数据.并显示.
public string[] GetData(string s)
{
}
由于数据量大,如果单线程运行,肯定需要大量时间.所以想一边读数据,一边分析数据,最后显示.
怎么用多线程去写呢,红自部分是我比较不能理解的,因为分析的数据是方法一读出来的数据,需要一条一条处理,怎么传才能保证多线程处理.
方法一:读数据,
public string[] SetData(string s,int s2)
{}
方法二:分析数据.并显示.
public string[] GetData(string s)
{
}
由于数据量大,如果单线程运行,肯定需要大量时间.所以想一边读数据,一边分析数据,最后显示.
怎么用多线程去写呢,红自部分是我比较不能理解的,因为分析的数据是方法一读出来的数据,需要一条一条处理,怎么传才能保证多线程处理.
解决方案 »
- 为什么给ImageList.Image.Tag赋值后,该属性还是空?
- 怎么解决主窗体线程关闭时子线程却还在执行任务这个问题
- 有持久化处理的wf顺序工作流的当前执行处
- 通过对象建立了一个数据源,在通过DATAGRID绑定数据源,当对象属性改变的时候如何能够让DATAGRID同步更新.
- 通信
- 用VS2005可以编辑Win32的exe文件,并可修改其中的控件。在控件上点击鼠标右键,为什么“Add Event Handler”等都是灰色不可选?
- c# 中如何判断一个程序是否正在运行?
- System.ArgumentException: 列“编 号”不属于表 tablename
- 多窗口程序中dock panel 中点击其子控件后引起的主窗口被销毁问题
- 欢迎大家谈谈.NET 互操作性
- winform程序,为什么与数据库绑定的文本框内容并没有修改但HasChanges()==true?
- 如何获取窗体中可看到的TextBox第一行的行号
一个线程放数据到列表中.另一线程读出来再进行操作,同时要lock一下
线程这个太复习拉搞不好反而会令程序越搞越麻烦
然后开启多线程每次取出队列首位,移除,然后自己加工去,然后显示即可
{
//todo: 读取数据
ThreadPool.QueueUserWorkItem(new WaitCallback(DoGetData), s);
}
public string[] GetData(string s)
{
} private void DoGetData(object s)
{
string[] result = GetData((string)s);
//todo:显示Result
} public void Main()
{
while (!是否结束主线程())
{
//todo: 使用两个参数调用 SetData();
Thread.Sleep(1); //1,或者你认为合适的值。
}
} private bool 是否结束主线程()
{
throw new NotImplementedException();我无法去理解你的SetData的string[]返回值和GetData的string输入值有什么联系。上面的程序只是一种可能的示例。
合格的平台是怎样的?现在的MS OS又是怎样的?.Net Framework在线程方面又是怎样的?不需要编写代码的“同步”技巧,并且.Net中所没有的同步技巧,是怎样的?不要仅仅冷嘲热讽嘛,稍微多说明一下好不好。
我不知道你如何显示。当你显示时,可能子线程中无法直接操作主线程中的一些界面层对象。你可以参考http://topic.csdn.net/u/20081002/23/0e911b8e-4cc5-4766-8d26-a885414df3c3.html
{
}
public string[] GetData(string s)
{
} private void DoGetData(object s)
{
string[] result = GetData((string)s);
//todo:显示Result
} public void Main()
{
while (!是否结束主线程())
{
string[] result;
//todo:使用两个参数调用 SetData() 结果赋值给 result
foreach (string s in result)
ThreadPool.QueueUserWorkItem(new WaitCallback(DoGetData), s);
Thread.Sleep(1); //1,或者你认为合适的值。
}
} private bool 是否结束主线程()
{
throw new NotImplementedException();
}