簡體   English   中英

我陷入了一個想法

[英]Got stuck thinking in an idea that i got

首先,對不起我無法給您一個合適的頭銜。 在搜索,搜索和搜索之后的幾乎整天,我一直沉迷於這個想法,直到我決定在Stackoverflow上提出這個問題!

因此,這就是我遇到的問題:

(我正在制作一個當前使用C#編碼的自動安裝程序,它是荷蘭語。它的確很棒,但是我只需要一件事即可完成基礎工作。例如:

  • 您在復選框中選擇了“多個”對象,這些對象是從復選框本身讀取的,它們會被修剪,然后在它們之后啟動。

現在一切正常,我想添加一個等待方法,例如,我們得到了:

  • Malwarebytes和CCleaner作為安裝“示例”。

現在,當兩者都選中時,我單擊“啟動”,它將啟動兩個程序。 我想做的是:告訴程序啟動一個程序,執行您的操作,一旦完成(關閉),它應該轉到下一個程序。

但是...有一個問題,我的程序在一個數組中啟動,因此如果檢查了多個對象,它基本上可以工作,那么它將啟動所有檢查的對象。 而且我真的不知道如何達成基本相同的目標:

  • 如果選擇了多個對象,請啟動對象,執行您的操作(自動單擊等),一旦關閉並確認其關閉,就移至下一個對象並執行相同的操作,直到完成。 我想使它與進度條一起使用,但從未真正看過進度條,因為它們似乎令人困惑。

我有一段代碼可以找到進程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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM