Ich habe eine Frage zu Timer im Thread?ThreadPool und Threading.Timer?
Mein Code:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Testing testing = new Testing();
Thread thread = new Thread(new ThreadStart(delegate
{
testing.Start();
}));
thread.IsBackground = true;
thread.Start();
}
}
public class Testing
{
System.Threading.Timer timer = null;
public void Start()
{
if (timer == null)
timer = new System.Threading.Timer(timerTick, null, 500, 500);
List<ManualResetEvent> amanual = new List<ManualResetEvent>();
for (int index = 0; index < 10; index++)
{
ManualResetEvent manual = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object context)
{
this.RunningThreadPool(context);
manual.Set();
}
));
amanual.Add(manual);
}
WaitHandle.WaitAll(amanual.ToArray());
Console.WriteLine("Task complete");
}
void timerTick(object sender)
{
Console.WriteLine("Timer running");
}
public void RunningThreadPool(object context)
{
Console.WriteLine("Thread in Threadpool is running...");
}
}
}
Und dies ist Folge Thema in Thread läuft ... Thema in Thread läuft ... Thema in Thread läuft ... Thread in Threadpool wird ausgeführt ... Thread in Threadpool wird ausgeführt ... Thread in Threadpool wird ausgeführt ... Thread in Threadpool wird ausgeführt ... Thread in Thread läuft ... Thema in Thread läuft ... Thema in Thread läuft ... Aufgabe abgeschlossen Timer läuft Timer läuft Timer läuft Timer läuft
Ich habe eine Frage, wie zu tun Timerlauf vor dem Ausführen des Threadpools. Außer Timer für Threadpool einstellen. Weil ich Timer-Überprüfung Threads auf Threadpool benötigen.
Aber ich bin Timer-Thread nicht in ThreadPool eingereiht. Irgendeine Lösung dafür, @spender? –
@ HùngLêXuân Nein, aber der Timer stellt den Rückruf im ThreadPool in eine Warteschlange. Lesen Sie das zweite Aufzählungszeichen unter Bemerkungen unter http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx –
Aus diesem Grund ist es sehr problematisch, hohe Workloads im ThreadPool auszuführen und es mit Arbeit zu überfordern. Viele .Net-APIs verlassen sich darauf, dass der ThreadPool flüssig bleibt, was zu unerwarteten Verzögerungen in Ihrer Anwendung führen kann. Erwägen Sie, die Arbeit in Ihren eigenen Threads auszuführen. – spender