利用线程显示数据 我在读取数据库的数据的时候,因为数据量不少,所以程序会有稍稍的卡死,然后一下子显示出来了,现在我想利用线程来控制数据的显示,就是读取到哪里就显示出多少,既有动态的效果,程序又不会卡死,请问这个如何实现啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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("主线程:收到了子线程的通知!"); } } 你参考一下吧 上面的那个少发了,以这个为准吧,win32控制台程序 class Program { 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; } C# 关于远程计算机的操作,求详解 两个Class如何用命令符"=="直接做是否相等的判断 紧急问题! c# 水晶报表打印 单据修改的思路 关于visual studio 2010 的帮助 求助批量提交,insert语句! 如何铺捉窗体的关闭事件? 连接ACCESS库,根据连接SQL的代码改,但错了 vs 2012中 怎么添加类库啊 将一条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;
}