到目前为止,我一整天都在努力工作,似乎无法找到原因......
我正在构建一个基本应用程序(我的第一个从头开始),我可以在其中添加名称(存储在.txt文件中),然后从列表中随机选择一个名称作为竞赛获胜者。在加载应用程序时,存储在txt文件中的名称将显示在文本块中,并且每次将名称添加到列表时都会更新此名称而不会出现问题。当我从列表中随机选择获胜者时会出现问题。我第一次选择一个它工作正常。它会弹出一个消息框,通知我获胜者,将其从列表中删除然后更新显示。如果我然后点击"选择赢家"再次,它抛出一个System.IO异常,说该文件正被另一个进程使用。这是我现在在代码中的内容。
private void SelectWinner_Click_1(object sender, RoutedEventArgs e)
{
string path = @"C:\CompWinner\Text\Entrants.txt";
string path2 = @"C:\CompWinner\Text\Entrants2.txt";
string[] allLines = File.ReadAllLines(path);
if (string.IsNullOrEmpty(allLines.ToString()))
{
string caption = "Error!";
string messageBoxText = "There are currently no Entrants.\r\nPlease add some entrants to select a winner";
MessageBoxButton messageBoxButton = MessageBoxButton.OK;
MessageBox.Show(messageBoxText, caption, messageBoxButton);
}
else
{
var list = new List<string>();
foreach (string line in allLines)
{
list.Add(line);
}
var r = new Random();
int I = list.Count;
int num = r.Next(I);
var winner = list[num];
string caption = "Winner!";
string messageBoxText = "And the winner is:\r\n" + winner + "!\r\nCongratulations!";
MessageBoxButton messageBoxButton = MessageBoxButton.OK;
MessageBox.Show(messageBoxText, caption, messageBoxButton);
list.Remove(winner);
foreach (string item in list)
{
int attempts = 15;
Exception cannotReadException = null;
while (attempts > 0)
{
try
{
using (StreamWriter sw = File.AppendText(path2))
{
string personName = item;
sw.WriteLine(personName);
}
}
catch (Exception exception)
{
cannotReadException = exception;
System.Threading.Thread.Sleep(3000);
attempts--;
}
break;
}
if (cannotReadException != null)
{
throw cannotReadException;
}
}
ReplaceLists(sender, e);
}
}
即使有try / catch,它仍然会在第一次无法读取时抛出异常!= null
真的希望有人可以帮我解决这个问题,因为这是我对这个应用程序的最后一个问题。