02-01-2005 02:52 AM
02-01-2005 09:25 AM
02-01-2005 11:48 AM
02-04-2005 04:35 PM
"Only the following members are safe for multithreaded operations: BeginInvoke, EndInvoke, Invoke, InvokeRequired, and CreateGraphics."
private void btnStart_Click(object sender, System.EventArgs e) {
StartTest();
}
private void StartTest() {
thread = new Thread(new ThreadStart(SimulationThread));
thread.IsBackground = true;
thread.Start();
}
delegate void PlotDoubleTimeSpanHandler(WaveformPlot plot, double data, TimeSpan interval);
delegate void PlotDoubleArrayTimeSpanHandler(WaveformPlot plot, double[] data, TimeSpan interval);
void PlotDoubleTimeSpan(WaveformPlot plot, double data, TimeSpan interval)
{
plot.PlotYAppend(data, interval);
}
void PlotDoubleArrayTimeSpan(WaveformPlot plot, double[] data, TimeSpan interval)
{
plot.PlotYAppend(data, interval);
}
void UpdateGraph(Delegate handler, params object[] args)
{
graph1.Invoke(handler, args);
}
private void SimulationThread() {
try {
TimeSpan ts5 = new TimeSpan(0, 0, 0, 0, 5);
TimeSpan ts45 = new TimeSpan(0, 0, 0, 0, 45);
DateTime lastTime = DateTime.Now;
PlotDoubleTimeSpanHandler valueIntervalHandler = new PlotDoubleTimeSpanHandler(PlotDoubleTimeSpan);
PlotDoubleArrayTimeSpanHandler arrayIntervalHandler = new PlotDoubleArrayTimeSpanHandler(PlotDoubleArrayTimeSpan);
while(true)
{
DateTime now = DateTime.Now;
TimeSpan timeIncr = now - lastTime;
lastTime = now;
// plot1.PlotYAppend(1, timeIncr);
UpdateGraph(valueIntervalHandler, plot1, 1, timeIncr);
// plot1.PlotYAppend(new double[] {1, 1, 1, 1, 1, 1, 1, 1, 1}, ts5);
UpdateGraph(arrayIntervalHandler, plot1, new double[] {1, 1, 1, 1, 1, 1, 1, 1, 1}, ts5);
// plot2.PlotYAppend(2, timeIncr);
UpdateGraph(valueIntervalHandler, plot2, 2, timeIncr);
// plot2.PlotYAppend(new double[] {2, 2, 2, 2, 2, 2, 2, 2, 2}, ts5);
UpdateGraph(arrayIntervalHandler, plot2, new double[] {2, 2, 2, 2, 2, 2, 2, 2, 2}, ts5);
// plot3.PlotYAppend(3, timeIncr + ts45);
UpdateGraph(valueIntervalHandler, plot3, 3, timeIncr + ts45);
// plot4.PlotYAppend(4, timeIncr + ts45);
UpdateGraph(valueIntervalHandler, plot4, 4, timeIncr + ts45);
//Thread.Sleep(50);
Thread.Sleep(25);
}
}
catch(Exception e) {
Console.WriteLine(e);
}
}