求 C# 多线程 实例

刚毕业..
现需要满足一种情况...每隔5分钟从数据库中取DataSet然后判断处理后放到另一个数据库..如果上次数据同步没完成则下次同步等上次同步任务完成后再执行..求个本质一样.简单明白的实例...可追加积分...
具体:
我查询出外系统的数据跟本系统的数据做对比后调用同步服务插入更新或删除数据;
我现在要做的是个应用程序.不断查询数据和调用服务..并保证前后同步的先后顺序...

//应为要判断上一个操作是否完成!用异步调用!

//主线程中启动一个支线程,执行doSomething这样的一个方法。
Thread thread = new Thread(new ThreadStart (doSomething));
thread.IsBackground = true;//这样能随主程序一起结束
thread.Start();

//定义2个委托doSomething的方法中能用的到
delegate void Delegate_do();

public void doSomething()
{
try
{
Delegate_do Delegate_do = new Delegate_do(do1);
IAsyncResult result = Delegate_do.BeginInvoke(null, null);//str1,str2 是方法do1的参数
while (!result.IsCompleted)
{
Thread.Sleep(5000);// 每隔5秒判断一下是否完成

}
if (result.IsCompleted)
{
Thread.Sleep(1000 * 300); //休眠5分钟,进行下一轮操作
doSomething();

}
}
catch (Exception exc)
{
MessageBox.Show(exc.Message);
}
}

private void do1()
{
//从数据库中取DataSet然后判断处理后放到另一个数据库 的代码
//(此处省略3000行)
}

已经测试一下(自己手写的,怕有错误),可以使用了!在执行一次完成后,休眠5分钟再执行,下一次操作!
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(new ThreadStart(xxx));
t.Start();
Console.ReadKey();
}
static void xxx()
{
Console.WriteLine("hello, world");
}
}
}
这是多线程
第2个回答  2011-09-08
你这么写timer控件应该在主线程里的吧,那你对应的取数据操作也在主线程里呀,在取数据的时候就会卡一下。

可以不需要timer控件,我给你段代码,你根据实际情况改下:
定义委托:private delegate void ShowMsg(string strMsg);
private ShowMsg SM;
PageLoad时给委托实例化:SM += new ShowMsg(SetLabel);
委托方法:private void SetLabel(string strMsg)
{
this.label2.Text=strMsg;//这里可以更新你需要更新的控件
}

1.在主线程里创建取数据线程
Thread t1 = new Thread(new ThreadStart(ThreadFunc));
t1.Start();
2.取数据线程方法
private void ThreadFunc()
{
int i = 0;
while (true)//这里根据你情况自己换个条件也行
{
//这里负责取数据
i++;
this.Invoke(SM, "取数据次数:" + i.ToString());//使用委托,更新主线程中的控件值
Thread.Sleep(5000);//等5秒执行一次
}
}

这样就不会一卡一卡的了

追问

我现在不懂的就是用哪个方法不断调用某个方法...另外怎么控制它们的先后顺序....我是做数据同步的..我要做个应用程序不断取数据然后调用我的服务....谢谢...呵呵

相似回答