日期:2014-05-20  浏览次数:20945 次

C# 多线程网络程序问题
做一个网络应用程序

一个form中   要实时判断显示远程数据库的一个“总数”字段

我是用timer控件每隔2秒中探测一次

private   void   timer2_Tick(object   sender,   System.EventArgs   e)
{

this.label9.Text   = "这是远程结果 "

}

但是这样运得程序在慢了,请问怎样用多线程实现后台每隔2秒探测呀
请写写代码

------解决方案--------------------
多线程实现有两种方法:
1,自己手动建立线程。
2.用.net内置的异步调用实现多线程。
Timer支持异步调用,所以可以用委托实现多线程。
大致这样。msdn提供了一个例子,代码如下。
楼主看看,稍改一下就可以了。

using System;
using System.Threading;
class TimerExample
{
static void Main()
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);

// Create the delegate that invokes methods for the timer.
TimerCallback timerDelegate =
new TimerCallback(statusChecker.CheckStatus);

// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine( "{0} Creating timer.\n ",
DateTime.Now.ToString( "h:mm:ss.fff "));
Timer stateTimer =
new Timer(timerDelegate, autoEvent, 1000, 250);

// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(0, 500);
Console.WriteLine( "\nChanging period.\n ");

// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine( "\nDestroying timer. ");
}
}

class StatusChecker
{
int invokeCount, maxCount;

public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}

// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine( "{0} Checking status {1,2}. ",
DateTime.Now.ToString( "h:mm:ss.fff "),
(++invokeCount).ToString());

if (invokeCount == maxCount)
{
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
}
}