不知道我在做什麼錯誤,但我有一個循環,應該打印15行到多行文本框,並且它打印10(成千上萬)(確切地說32,767)。我有2個類:我的表單類(DISMgui.cs)和我的邏輯類(DISM.cs)。ForEach循環重複行
表格具有用於文件的文本框(txtWimFile),按鈕(btnMount),背景工人(bwMountWim)和用於輸出的ML文本框(爲txtOutput)。
場景:在txtWimFile(例如C:\ Temp \ Win7x64.wim)中輸入文件的名稱。點擊btnMount。這要求bwMountWim.RunWorkerAsync():
private void btnMount_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(txtWimFile.Text))
bwMountWim.RunWorkerAsync();
else
MessageBox.Show("WIM file text box returned null!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
這就要求從DISM類(的imageinfo)的方法:
private void bwMountWim_DoWork(object sender, DoWorkEventArgs e)
{
imageInfo = DISM.ImageInfo(GetTxtWimFile(), this);
}
的imageinfo使用DismApi收集WIM映像上的信息,並返回信息:
public static DismImageInfoCollection ImageInfo(string wimFile, DISMgui that)
{
DismImageInfoCollection info = null;
try
{
info = DismApi.GetImageInfo(wimFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return info;
}
的背景工人RunWorkerCompleted返回信息爲txtOutput.Text:
private void bwMountWim_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
foreach (DismImageInfo info in imageInfo)
{
Output = "";
Output += "Image information for image " + WimFile + System.Environment.NewLine;
Output += System.Environment.NewLine;
Output += String.Format("Image index : {0}" + System.Environment.NewLine, info.ImageIndex.ToString());
Output += String.Format("Image name : {0}" + System.Environment.NewLine, info.ImageName.ToString());
Output += String.Format("Image Internal Size : {0} MB" + System.Environment.NewLine, (info.ImageSize/1048576).ToString("N0"));
Output += String.Format("Image Description : {0}" + System.Environment.NewLine, info.ImageDescription.ToString());
Output += String.Format("Image Type : {0}" + System.Environment.NewLine, info.ImageType.ToString());
Output += String.Format("Image Installation : {0}" + System.Environment.NewLine, info.InstallationType.ToString());
Output += String.Format("Image Prod Name : {0}" + System.Environment.NewLine, info.ProductName.ToString());
Output += String.Format("Image Prod Suite : {0}" + System.Environment.NewLine, info.ProductSuite.ToString());
Output += String.Format("Image Prod Type : {0}" + System.Environment.NewLine, info.ProductType.ToString());
Output += String.Format("Image Prod Version : {0}" + System.Environment.NewLine, info.ProductVersion.ToString());
Output += String.Format("Image Bootable : {0}" + System.Environment.NewLine, info.Bootable.ToString());
Output += String.Format("Image Architecture : {0}" + System.Environment.NewLine, info.Architecture.ToString());
Output += String.Format("Image Edition ID : {0}" + System.Environment.NewLine, info.EditionId.ToString());
}
txtOutput.Text = Output;
}
DismApi設置爲能夠處理具有多個索引的WIM,儘管我通常使用的WIM只有一個。
我理解我的邏輯的方式,在「imageInfo」中只應該有一個「info」對象,從而只運行一次循環。但是,我收到了超過30,000行返回的內容(請參閱here,對於pastebin來說太多了)。具有諷刺意味的是,最後15行應該是這樣。
如果有人能說出爲什麼在這個問題上,我能做些什麼來解決它,我會很感激。我有一種感覺,那簡直是愚蠢的。
代碼Output
屬性:
public string Output
{
get { return output; }
set
{
if (!String.IsNullOrEmpty(value))
{
output += value;
}
}
}
你有過在調試器的代碼踩看到'imageInfo'項的個數? – Tim
@Tim應該不重要,因爲每個循環在將其他值連接到它之前將'Output'重置爲空字符串。所以,只有來自最終迭代的值纔會被設置爲「textOutput.Text」。 – juharr
什麼是輸出?它是如何定義的? –