各位大侠帮忙看看这段代码到底有什么问题啊,这是利用语音识别,然后命令匹配,来生成一个播放列表的TabPage,每次运行都没有出现错误提醒,但运行的时候程序总是崩溃,悲剧啊!
//创建播放列表
private void createPlaylists()
{
/*
int i = PlayLists.Items.Count+1;
countOfPlaylists = i;
PlayLists.Items.Add("播放列表" + countOfPlaylists);
*/
Control.CheckForIllegalCrossThreadCalls = false;
TabPage tabPageAdded;
bool LastIndex = true;
int i = 1;
for(i=1;i<TabControl.TabPages.Count;i++)
{
if (TabControl.TabPages[i].Text != "播放列表" + i)
{
LastIndex = false;
break;
}
}
if(LastIndex == true)
{
indexOfFileToBeAdded = TabControl.TabPages.Count;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
else
{
indexOfFileToBeAdded = i;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
try
{
FileStream fs = new FileStream(@"F:\我们的歌\播放列表" + indexOfFileToBeAdded + ".txt", FileMode.OpenOrCreate);
}
catch(IOException e)
{
new SpeechSynthesizer().Speak("IO异常发生了");
}
tabPageAdded.Text = "播放列表" + indexOfFileToBeAdded;
new SpeechSynthesizer().Speak("播放列表" + indexOfFileToBeAdded + "创建成功");
//PlayLists.SelectedItem = "播放列表" + countOfPlaylists;
TabControl.SelectedTab = tabPageAdded;
indexOfFileToBeAdded++;
}
//创建播放列表
private void createPlaylists()
{
/*
int i = PlayLists.Items.Count+1;
countOfPlaylists = i;
PlayLists.Items.Add("播放列表" + countOfPlaylists);
*/
Control.CheckForIllegalCrossThreadCalls = false;
TabPage tabPageAdded;
bool LastIndex = true;
int i = 1;
for(i=1;i<TabControl.TabPages.Count;i++)
{
if (TabControl.TabPages[i].Text != "播放列表" + i)
{
LastIndex = false;
break;
}
}
if(LastIndex == true)
{
indexOfFileToBeAdded = TabControl.TabPages.Count;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
else
{
indexOfFileToBeAdded = i;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
try
{
FileStream fs = new FileStream(@"F:\我们的歌\播放列表" + indexOfFileToBeAdded + ".txt", FileMode.OpenOrCreate);
}
catch(IOException e)
{
new SpeechSynthesizer().Speak("IO异常发生了");
}
tabPageAdded.Text = "播放列表" + indexOfFileToBeAdded;
new SpeechSynthesizer().Speak("播放列表" + indexOfFileToBeAdded + "创建成功");
//PlayLists.SelectedItem = "播放列表" + countOfPlaylists;
TabControl.SelectedTab = tabPageAdded;
indexOfFileToBeAdded++;
}
{
try
{ /*
int i = PlayLists.Items.Count+1;
countOfPlaylists = i;
PlayLists.Items.Add("播放列表" + countOfPlaylists);
*/
Control.CheckForIllegalCrossThreadCalls = false;
TabPage tabPageAdded;
bool LastIndex = true;
int i = 1;
for(i=1;i<TabControl.TabPages.Count;i++)
{
if (TabControl.TabPages[i].Text != "播放列表" + i)
{
LastIndex = false;
break;
}
}
if(LastIndex == true)
{
indexOfFileToBeAdded = TabControl.TabPages.Count;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
else
{
indexOfFileToBeAdded = i;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
try
{
FileStream fs = new FileStream(@"F:\我们的歌\播放列表" + indexOfFileToBeAdded + ".txt", FileMode.OpenOrCreate);
}
catch(IOException e)
{
new SpeechSynthesizer().Speak("IO异常发生了");
}
tabPageAdded.Text = "播放列表" + indexOfFileToBeAdded;
new SpeechSynthesizer().Speak("播放列表" + indexOfFileToBeAdded + "创建成功");
//PlayLists.SelectedItem = "播放列表" + countOfPlaylists;
TabControl.SelectedTab = tabPageAdded;
indexOfFileToBeAdded++;
}}
catch(Exception ee)
{
MessageBox.Show(ee.ToString());
}TRY--CATCH全部代码都包起来,先看看是什么异常。
然后单步调试
if(LastIndex == true)
{
indexOfFileToBeAdded = TabControl.TabPages.Count;
tabPageAdded = new TabPage("播放列表"+indexOfFileToBeAdded);
TabControl.TabPages.Add(tabPageAdded);
}
TabControl.TabPages.Add(tabPageAdded);
我把断点设置在这一行的下面时,运行到断点处,会发生ArgumentException
异常,然后下面还附有一行:Controls created on one thread cannot be parented to a control on a different thread.
不知道这是什么原因?