多线程实现timer控件刷新显示时间 如何做? rt 谢谢 winform下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 winform下 用timer控件刷新时间 定时调用显示时间的方法比如public void d(){ xxx.text=DateTime.Now.Tostring();}然后timer。start()现在问题是如何用多线程实现 越来越糊涂,你显示时间怎么还多线程,一个timer控件,代码里直接写比如xxx.text=datetime.now.tostring();不就一直刷新的显示时间了吗?怎么还要多线程? C#还封装了一种线程时间控件的东西如果自己做就开一个线程,要间隔15秒刷一次,就让该线程sleep(15)while(true){//刷新控件Thread.Sleep(15);}注意线程间通信 using System;using System.Threading;public class MonitorSample{ public static void Main(String[] args) { int result = 0; Cell cell = new Cell( ); CellProd prod = new CellProd(cell, 20); CellCons cons = new CellCons(cell, 20); Thread producer = new Thread(new ThreadStart(prod.ThreadRun)); Thread consumer = new Thread(new ThreadStart(cons.ThreadRun)); try { producer.Start( ); consumer.Start( ); producer.Join( ); consumer.Join( ); Console.ReadLine(); } catch (ThreadStateException e) { Console.WriteLine(e); result = 1; } catch (ThreadInterruptedException e) { Console.WriteLine(e); result = 1; } Environment.ExitCode = result; }}public class CellProd{ Cell cell; int quantity = 1; public CellProd(Cell box, int request) { cell = box; quantity = request; } public void ThreadRun( ) { for(int looper=1; looper<=quantity; looper++) cell.WriteToCell(looper); }}public class CellCons{ Cell cell; int quantity = 1; public CellCons(Cell box, int request) { cell = box; quantity = request; } public void ThreadRun( ) { int valReturned; for(int looper=1; looper<=quantity; looper++) valReturned=cell.ReadFromCell( ); }}public class Cell{ int cellContents; bool readerFlag = false; public int ReadFromCell( ) { lock(this) { if (!readerFlag) { try { Monitor.Wait(this); } catch (SynchronizationLockException e) { Console.WriteLine(e); } catch (ThreadInterruptedException e) { Console.WriteLine(e); } } Console.WriteLine("Consume: {0}",cellContents); readerFlag = false; Monitor.Pulse(this); } return cellContents; } public void WriteToCell(int n) { lock(this) { if (readerFlag) { try { Monitor.Wait(this); } catch (SynchronizationLockException e) { Console.WriteLine(e); } catch (ThreadInterruptedException e) { Console.WriteLine(e); } } cellContents = n; Console.WriteLine("Produce: {0}",cellContents); readerFlag = true; Monitor.Pulse(this); } }} 错了 Sleep是毫秒级的...楼主注意 请问 C#PANEL 跨滚动条截图 Axtive控件的问题 如何用rawsocket接收tcp数据包 C#十六进制处理难题 关于DataReader的问题 急等Picture,using什么引用? 如何高效获取winform中DataGrid中的所选记录(多条记录选择) 如何用C#写段代码检测PLC脉冲数据的上升沿 C#面试基础问题 AssemblyBuilder和Assembly的区别是什么? 安装程序和注册表的问题 GridView动态添加templatefield,如何对其进行编辑,更新等等
public void d()
{
xxx.text=DateTime.Now.Tostring();
}
然后timer。start()现在问题是如何用多线程实现
xxx.text=datetime.now.tostring();
不就一直刷新的显示时间了吗?怎么还要多线程?
如果自己做
就开一个线程,要间隔15秒刷一次,就让该线程sleep(15)
while(true)
{
//刷新控件
Thread.Sleep(15);
}
注意线程间通信
using System;
using System.Threading;public class MonitorSample
{
public static void Main(String[] args)
{
int result = 0;
Cell cell = new Cell( ); CellProd prod = new CellProd(cell, 20);
CellCons cons = new CellCons(cell, 20); Thread producer = new Thread(new ThreadStart(prod.ThreadRun));
Thread consumer = new Thread(new ThreadStart(cons.ThreadRun)); try
{
producer.Start( );
consumer.Start( ); producer.Join( );
consumer.Join( );
Console.ReadLine();
}
catch (ThreadStateException e)
{
Console.WriteLine(e);
result = 1;
}
catch (ThreadInterruptedException e)
{
Console.WriteLine(e);
result = 1;
}
Environment.ExitCode = result;
}
}public class CellProd
{
Cell cell;
int quantity = 1; public CellProd(Cell box, int request)
{
cell = box;
quantity = request;
}
public void ThreadRun( )
{
for(int looper=1; looper<=quantity; looper++)
cell.WriteToCell(looper);
}
}public class CellCons
{
Cell cell;
int quantity = 1; public CellCons(Cell box, int request)
{
cell = box;
quantity = request;
}
public void ThreadRun( )
{
int valReturned;
for(int looper=1; looper<=quantity; looper++)
valReturned=cell.ReadFromCell( );
}
}public class Cell
{
int cellContents;
bool readerFlag = false;
public int ReadFromCell( )
{
lock(this)
{
if (!readerFlag)
{
try
{
Monitor.Wait(this);
}
catch (SynchronizationLockException e)
{
Console.WriteLine(e);
}
catch (ThreadInterruptedException e)
{
Console.WriteLine(e);
}
}
Console.WriteLine("Consume: {0}",cellContents);
readerFlag = false;
Monitor.Pulse(this);
}
return cellContents;
}
public void WriteToCell(int n)
{
lock(this)
{
if (readerFlag)
{
try
{
Monitor.Wait(this);
}
catch (SynchronizationLockException e)
{
Console.WriteLine(e);
}
catch (ThreadInterruptedException e)
{
Console.WriteLine(e);
}
}
cellContents = n;
Console.WriteLine("Produce: {0}",cellContents);
readerFlag = true;
Monitor.Pulse(this);
}
}
}
楼主注意