问题遇到的现象和发生背景
将耗时方法放到了线程里,为啥主线程还是会卡死呢?
问题相关代码,请勿粘贴截图
这个是丢到线程的函数
private void ConvertbyC()
{
FileStream fs = new FileStream(inputpath, FileMode.Open, FileAccess.Read);
StreamReader sw=new StreamReader(fs);
string str = sw.ReadToEnd();
string[] s = str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
listX.Clear();
listY.Clear();
listZ.Clear();
for (int i = 0; i < s.Length; i++)
{
string[] singles = s[i].Split(' ');
for (int j = 0; j < singles.Length; j++)
{
if (j == 0)
listX.Add(double.Parse(singles[0]));
else if (j == 1)
listY.Add(double.Parse(singles[1]));
else
listZ.Add(double.Parse(singles[2]));
}
}
this.Invoke(new Action(() =>
{
trackBar1.Maximum = (int)listZ.Max();
trackBar2.Maximum = (int)listZ.Max();
richTextBox1.AppendText("finish converting");
button2.Enabled = true;
}));
ws = WorkStatus.free;
fs.Flush();
fs.Close();
}
这个是通过点击按钮开启线程的方法
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = ".txt|.txt";
ofd.Multiselect = false;
if (ofd.ShowDialog() == DialogResult.OK)
{
textBox1.Text = ofd.FileName;
inputpath = ofd.FileName;
}
else
return;
richTextBox1.AppendText("start converting...\r\n");
ws= WorkStatus.busy;
th = new Thread(ConvertbyC);
th.IsBackground = true;
th.Start();
}
界面如下
这样就卡死了 理论上不应该啊,想问下有没有什么解决思路