我的背景工作者遇到了问题......它只是停止了......它没有通过它应该通过的所有代码......
在下面的代码中它只是停在String gName = comboBox1.SelectedItem.ToString();
没有任何错误没有..下面的代码根本就没有运行..我通过在ZipFile pack = new ZipFile();
放置一个断点来测试这个...断点不会被触发......我一遍又一遍地查看我的代码......我不明白为什么会这样做......
后台工作人员:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
String appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).ToString();
String gpsPath = appDataFolder + "/GameProfileSaver";
String userDir = gpsPath + "/profiles/" + currentUserLabel.Text;
XmlDocument doc = new XmlDocument();
doc.Load(userDir + "\\games.xml");
String gName = comboBox1.SelectedItem.ToString();
ZipFile pack = new ZipFile();
foreach (XmlNode node in doc.SelectNodes("//games/game[gameName='" + gName + "']/Files/file"))
{
try
{
if (!Directory.Exists(userDir + "\\" + gName))
{
Directory.CreateDirectory(userDir + "\\" + gName);
}
pack.AddFile(node.InnerText);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
pack.Save(userDir + "\\" + gName);
}
答案 0 :(得分:4)
您应该只从UI线程访问UI元素。如果要使用组合框中的选定值,则应将其传递给后台工作程序。
您可以查看有关如何操作的答案:Sending Arguments To Background Worker?
答案 1 :(得分:3)
您无法从其他线程访问Windows窗体控件。
答案 2 :(得分:0)
我的猜测是在该行之前有一个未被处理的异常。从Source开始,您尝试访问try catch之外的组合框。
You must be careful not to manipulate any user-interface objects in your DoWork event handler.