目前,我正在使用Web服务,客户端不断更新数据。
因此,WebService有一个List<Client> clients;
,它存储了Connected Client:
[WebMethod]
public string Connect(Size desktopsize)
{
Client clienti = new Client();
clienti.ID = "Client_" + Counter.ToString();
clienti.Desktopsize = desktopsize;
clienti.Lastupdate = DateTime.Now;
Counter++;
clients.Add(clienti);
return clienti.ID;
}
所以每个客户都有一个ID,并继续更新它的数据。 我需要将客户端脱机标记为比特定客户端的最后更新时间为1分钟。(每次更改值时,我也会更新UpdateTime 喜欢:
public bool SingleClick
{
get
{
bool tmpBolean = singleclick;
singleclick = false;
return tmpBolean;
}
set
{
this.lastupdate = DateTime.Now;
singleclick = value;
}
}
首先,我曾经在客户端创建一个线程
private void CheckOnlinestate()
{
while (isRunning)
{
TimeSpan ts = DateTime.Now - lastupdate;
if (ts.TotalMinutes >= 1)
{
isRunning = false;
this.Dispose();
}
}
}
而不是在WebService上监视客户端是否应从列表中删除的线程:
public void CheckClients()
{
while (true)
{
foreach (Client c in clients)
{
if (c.ShouldDispose)
{
clients.Remove(c);
}
}
Thread.Sleep(200);
}
}
所以问题是,如何在WebService构造函数中创建和启动线程,如何正确地将此方法用于线程,或者有更好的方法来执行此操作。
我无法想象如何从List<Client> clients;
答案 0 :(得分:0)
您可以使用System.Web.HttpRuntime.Cache
课程而非实施自己的课程。
您的代码还存在其他一些问题。对Counter
和clients
的访问不受控制,这些访问在线程之间共享。你应该使用一些同步。访问这些对象时lock
等机制(如果您已将clients
声明为ConcurrentDictionary
,则可以忘记我对{{1}}的评论)