利用线程显示数据

staticuser 2009-08-17 08:40:10
我在读取数据库的数据的时候,因为数据量不少,所以程序会有稍稍的卡死,然后一下子显示出来了,现在我想利用线程来控制数据的显示,就是读取到哪里就显示出多少,既有动态的效果,程序又不会卡死,请问这个如何实现啊。。。


...全文
52 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrnian2008 2009-08-19
  • 打赏
  • 举报
回复
        //委托
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;
}
yuyingying1986 2009-08-19
  • 打赏
  • 举报
回复
上面的那个少发了,以这个为准吧,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());
}
}
}
yuyingying1986 2009-08-19
  • 打赏
  • 举报
回复

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("主线程:收到了子线程的通知!");
}
}


你参考一下吧
shuttleR 2009-08-17
  • 打赏
  • 举报
回复
楼上的基本属于没说
zzyzgydotnet 2009-08-17
  • 打赏
  • 举报
回复
将写数据的代码置于独立的线程中。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧