Я пытаюсь создать приложение Windows Forms с C#, которое считывает последовательный порт и возвращает значения в DataTable
. Я создал новый поток (я попытался создать поток с потоками и BackgroundWorker
), чтобы прочитать порт, а затем отобразить значения в DataTable
.Скорость потока при чтении порта
Моя проблема в том, что даже без чтения порта я не могу получить более 100 значений в секунду. Вот мой код без чтения порта (только писать то же значение для каждой строки DataTable
:.
namespace BackgroundWorkerExample
{
public partial class BackgroundWorkerExample : Form
{
private int counter = 0;
private bool threadRunning = false;
private DataTable dt = new DataTable();
public BackgroundWorkerExample()
{
InitializeComponent();
}
private void BackgroundWorkerExample_Load(object sender, EventArgs e)
{
//Clear DataTable
dt.Clear();
//Add Collumns
dt.Columns.Add("Name");
dt.Columns.Add("Value");
dt.Columns.Add("Time", typeof(TimeSpan));
dataGridView1.DataSource = dt;
}
private void StartButton_Click(object sender, EventArgs e)
{
threadRunning = true;
Thread oThread = new Thread(countUp);
oThread.Start();
}
private void StopButton_Click(object sender, EventArgs e)
{
//TimerLabel.Text = timer.ToString();
threadRunning = false;
}
private void countUp()
{
while (threadRunning)
{
DataRow newRow = dt.NewRow();
newRow["Name"] = counter;
newRow["Value"] = 5;
newRow["Time"] = DateTime.Now.TimeOfDay;
dt.Rows.Add(newRow);
counter++;
}
}
}
}
Здесь метод countUp
выполняется в отдельном потоке Если я не создаю новый поток и запустить countUp
в моей основной форме нить приложение никогда не вернется, но оно намного быстрее.
В будущем добавьте тег языка программирования, такой как C#, к вопросам, содержащим/о коде. Это поможет людям, знакомым с рассматриваемым языком программирования, найти ваш вопрос. –