我在读取数据库的数据的时候,因为数据量不少,所以程序会有稍稍的卡死,然后一下子显示出来了,现在我想利用线程来控制数据的显示,就是读取到哪里就显示出多少,既有动态的效果,程序又不会卡死,请问这个如何实现啊
解决方案 »
- C# 怎么制作独立的EXE文件?使其在未安装Framework的机器上运行?
- C#异形窗体,急!!!
- 急!如何将一串十六进制的字符转换为含有字母,数字的字符串?
- 思路受限` 请求大家帮忙出招`~~
- Socket包头、包体问题
- 急,在线等!web如何打开文本框中输路径的本地文件
- 国庆不加班快乐~菜鸟提问:axbrowser中如何与progressbar进行绑定?看在100分上给详细解答一下
- 我没有任何.Net开发经验,学C#是VS2003还是2005?谢谢!
- 把DataGridView中数据导出到文本文档
- 讨论.net和C#的新天地:“xml中华网”.net论坛!
- 将一条VB.NET转成C#
- 搞网页游戏需要怎样的服务器?
class Program
{
static void Main(string[] args)
{
MyMainThread mainThread = new MyMainThread();
mainThread.Test();
//Thread thread = new Thread(new ThreadStart(mainThread.Test));
//thread.Start();
MyThreadDemo domethread = new MyThreadDemo();
domethread.Run(); while (true)
{
;
} }
} class MyMainThread
{
public void Test()
{
MyThreadWrapper wrapper = new MyThreadWrapper(GetDataAfterMyThread);
Thread thread = new Thread(new ThreadStart(wrapper.DoMyThread));
thread.Start(); while (thread.IsAlive)
{
;
} Thread.CurrentThread.Join(100);
Console.WriteLine("主线程:我接着进行……");
for (int i = 0; i < 10; i++)
{
Thread.CurrentThread.Join(100);
Console.WriteLine("主线程:" + i.ToString());
}
} void GetDataAfterMyThread(object data)
{
Console.WriteLine(data.ToString());
Console.WriteLine("主线程:收到了子线程的通知!");
}
}
你参考一下吧
{
static void Main(string[] args)
{
MyMainThread mainThread = new MyMainThread();
mainThread.Test();
Thread thread = new Thread(new ThreadStart(mainThread.Test));
thread.Start();
while (true)
{
;
} }
} class MyMainThread
{
public void Test()
{
MyThreadWrapper wrapper = new MyThreadWrapper(GetDataAfterMyThread);
Thread thread = new Thread(new ThreadStart(wrapper.DoMyThread));
thread.Start(); while (thread.IsAlive)
{
;
} Thread.CurrentThread.Join(100);
Console.WriteLine("主线程:我接着进行……");
for (int i = 0; i < 10; i++)
{
Thread.CurrentThread.Join(100);
Console.WriteLine("主线程:" + i.ToString());
}
} void GetDataAfterMyThread(object data)
{
Console.WriteLine(data.ToString());
Console.WriteLine("主线程:收到了子线程的通知!");
}
}
class MyThreadWrapper
{
public delegate void DelegateDoAfterFinish(object data);
DelegateDoAfterFinish DoAfterFinish = null;
public MyThreadWrapper()
{
}
public MyThreadWrapper(DelegateDoAfterFinish d)
{
DoAfterFinish = d;
}
public void DoMyThread()
{
Console.WriteLine("子线程:我正在做些事情!");
Thread.CurrentThread.Join(1000); if (DoAfterFinish != null)
{
DoAfterFinish("子线程:OK,我做完啦!");
}
} public void DoMyThread(object i)
{
Console.WriteLine("子线程:我正在做些事情!");
Thread.CurrentThread.Join(1000); i = 100;
if (DoAfterFinish != null)
{
DoAfterFinish("子线程:OK,我做完啦!" + i.ToString());
}
}
}
public delegate void SetTextCallback(string text); //显示状态(ListBox)
private void SetText(string text)
{
if (this.listBoxStatus.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.listBoxStatus.Items.Add(text);
this.listBoxStatus.SelectedIndex = this.listBoxStatus.Items.Count - 1;
} //你的程序按钮事件
private void button1_Click(object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(MyWorkThread));
thread1.Start();
} //线程调用的函数
public void MyWorkThread(object p1)
{
//你要干的事
//......
SetText("你要显示的进度");
//......
return;
}