【发布时间】:2013-11-30 12:10:29
【问题描述】:
我正在尝试使用 c# 创建一个 Windows 窗体应用程序,该应用程序读取串行端口并将值返回到 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# 之类的编程语言标签。这将帮助熟悉相关编程语言的人找到您的问题。
标签: c# multithreading performance