05-16-2016 08:15 AM
I'm working on a search program and would like to have a national instruments led control blinking during the search. The led needs to be started on its own thread while the search runs on a separate thread. This is my first attempt at multi-threading in c# and I'm not sure what to try.
Here is my c# code, I'm trying to start the LED blinking then run the search then stop the LED blinking. The LEDON() and LEDOFF() work if run separately.
private void btnSearch_Click(object sender, EventArgs e)
{
Thread LEDStart = new Thread(LEDON); //Creates a Thread that will call LEDON()
LEDStart.Start();
int i;
string temp = "*" + textBoxFileName.Text + "*";
string[] AllFiles = Directory.GetFiles(this.textBoxFolderpath.Text, temp, SearchOption.AllDirectories);
for (i = 0; i < AllFiles.Length - 1; i++)
{
progressBar1.Maximum = AllFiles.Length - 1;
string[] row = new string[] { Path.GetFileName(AllFiles[i]), AllFiles[i] };
dataGridView1.Rows.Add(row);
progressBar1.Increment(1);
if (progressBar1.Value == progressBar1.Maximum)
{
Thread LEDEND = new Thread(LEDOFF); //Creates a Thread that will call LEDOFF()
LEDEND.Start();
}
}
}
//Turn On LED
private void LEDON()
{
if (this.led1.InvokeRequired)
{
this.led1.Invoke(new MethodInvoker(() => LEDON()));
return;
}05-17-2016 05:18 AM
Looks like my code got cut off, here is the complete code:
private void btnSearch_Click(object sender, EventArgs e)
{
Thread LEDStart = new Thread(LEDON); //Creates a Thread that will call LEDON()
Thread.CurrentThread.Name = "LEDON";
LEDStart.Start();
int i;
string temp = "*" + textBoxFileName.Text + "*";
string[] AllFiles = Directory.GetFiles(this.textBoxFolderpath.Text, temp, SearchOption.AllDirectories);
for (i = 0; i < AllFiles.Length - 1; i++)
{
progressBar1.Maximum = AllFiles.Length - 1;
string[] row = new string[] { Path.GetFileName(AllFiles[i]), AllFiles[i] };
dataGridView1.Rows.Add(row);
progressBar1.Increment(1);
if (progressBar1.Value == progressBar1.Maximum)
{
Thread LEDEND = new Thread(LEDOFF); //Creates a Thread that will call LEDOFF()
//Thread.CurrentThread.Name = "LEDOFF";
LEDEND.Start();
}
}
}
//Turn On LED
public void StartLEDON()
{
Thread LEDStart = new Thread(LEDON); //Creates a Thread that will call LEDON()
//Thread.CurrentThread.Name = "LEDON";
LEDStart.Start();
}
public void LEDON()
{
if (this.led1.InvokeRequired)
{
this.led1.Invoke(new MethodInvoker(() => LEDON()));
return;
}
led1.BlinkMode = NationalInstruments.UI.LedBlinkMode.BlinkWhenOn;
led1.Value = true;
}
//Turn Off LED
public void LEDOFF()
{
if (this.led1.InvokeRequired)
{
this.led1.Invoke(new MethodInvoker(() => LEDOFF()));
return;
}
//led1.BlinkMode = NationalInstruments.UI.LedBlinkMode.BlinkWhenOn;
led1.Value = false;
}
05-19-2016
04:28 PM
- last edited on
06-10-2025
02:16 PM
by
Content Cleaner
Have you taken a look at the multithreading whitepaper that goes over multithreading in CVI?
https://www.ni.com/en/support/documentation/supplemental/06/multithreading-in-labwindows--cvi.html
Additionally, there is an example that goes through how to do multithreading in CVI.
http://www.ni.com/example/29662/en/
Do you have a more specific questoin?