[英]Got stuck thinking in an idea that i got
首先,對不起我無法給您一個合適的頭銜。 在搜索,搜索和搜索之后的幾乎整天,我一直沉迷於這個想法,直到我決定在Stackoverflow上提出這個問題!
因此,這就是我遇到的問題:
(我正在制作一個當前使用C#編碼的自動安裝程序,它是荷蘭語。它的確很棒,但是我只需要一件事即可完成基礎工作。例如:
現在一切正常,我想添加一個等待方法,例如,我們得到了:
現在,當兩者都選中時,我單擊“啟動”,它將啟動兩個程序。 我想做的是:告訴程序啟動一個程序,執行您的操作,一旦完成(關閉),它應該轉到下一個程序。
但是...有一個問題,我的程序在一個數組中啟動,因此如果檢查了多個對象,它基本上可以工作,那么它將啟動所有檢查的對象。 而且我真的不知道如何達成基本相同的目標:
我有一段代碼可以找到進程ID,所以也許我可以做些什么,但是在我啟動的應用程序上進程ID從來都不相同,所以當它們在數組中啟動時,我有點問題。
有人可以幫助我,請弄清楚什么以及如何編碼/執行此操作?
這是我用來完成這項工作的代碼:
string pad = Application.StartupPath;
foreach (string checkedItem in checkedListBox1.CheckedItems)
{
if (checkedItem.Contains("."))
{
string str = checkedItem;
if (str.Contains("."))
{
int index = str.IndexOf('.');
string folder = str.Substring(0, index);
try
{
bool started = false;
var process = new Process();
process.StartInfo.FileName = pad + "/data/" + folder + "/" + checkedItem;
started = process.Start();
var processID = process.Id;
var processNAAM = process.ProcessName;
textBox1.Text += "Gevonden - ID: " + processID + " NAAM: " + processNAAM + Environment.NewLine;
textBox1.Text += DateTime.Now.ToString("HH:mm:ss", System.Globalization.DateTimeFormatInfo.InvariantInfo) + " - " + "Installatie Keuze wordt opgestart." + Environment.NewLine;
process.WaitForExit();
}
catch (Exception)
{
}
}
}
}
首先,可以使用CheckedListBox的CheckedItems屬性使代碼更簡單,更短。 其次,沒有必要將字符串從一個復制到另一個。 字符串在.NET中是不可變的-它們永遠不會改變。 您只能保留一份副本並從那里剪切。
接下來,您可以使用System.IO.Path
的方法來剪切不帶擴展名的文件名,或構建完整路徑而不必擔心“ /”太多或太少。
第三,對於您的原始問題-只需在您的Process
對象上調用WaitForExit
,使其等待,然后繼續處理列表即可。
第三
foreach (string checkedItem in checkedListBox1.CheckedItems)
{
if (checkedItem.Contains("."))
{
string baseName = Path.GetFileNameWithoutExtension(checkedItem);
string processPath = Path.Combine(pad, "data", baseName, checkedItem);
Process process = Process.Start(processPath);
process.WaitForExit();
}
}
在您開始流程的行( process.Start()
)之后,只需添加以下內容:
process.WaitForExit()
這將暫停包含線程,直到目標進程退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.