gpt4 book ai didi

c# - 信号量和多线程处理 Process.Start 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:16 24 4
gpt4 key购买 nike

不确定我下面的代码有什么问题,但没有按预期工作。该设计允许用户从 ListBox 中选择任意数量的输入文件,然后单击“执行”按钮以使用不同的输入文件启动相同的可执行文件。我将添加一个控件以允许用户指定并发进程的数量,但现在我硬编码为 3 以进行测试。我的期望是每个可执行文件都将按顺序启动(尽管我知道它们可能不会那样完成)并且一次只会执行 3 个(尽管这个数字最终将由用户输入控件控制)。我想要调用进程的函数的附加功能,即任务优先级、返回退出代码,但现在我无法使基本功能正常工作。我已经尝试了在本网站和网络上的其他网站上找到的多种代码变体,但仍然无法正常工作。这是当前版本:

    private void btnParserExe_Click(object sender, EventArgs e)
{
Pool = new Semaphore(3,3); //Pool above declared as class variable
string ExeName = "C:\\Program Files (x86)\\Norman\\bin\\OC2.exe";
string Args;
string ArgDir = this.dirListBox1.Path + "\\";

for (int i = 0; i < this.fileListBox1.Items.Count; i++)
{
if (this.fileListBox1.GetSelected(i) == true)
{
Args = "-i " + this.fileListBox1.get_Items(i) + " -r -c -noerr";
Thread thread = new Thread(() => DoWork(ArgDir, ExeName, Args, "3"));
thread.Start();
}
}
}


private static void DoWork(string WorkingDir, string exefile, string parameters, string priority)
{
Pool.WaitOne();

Process exeProcess = new Process();
int exitCode;

try
{
exeProcess.StartInfo.FileName = exefile;
exeProcess.StartInfo.Arguments = parameters;
exeProcess.StartInfo.WorkingDirectory = WorkingDir;
exeProcess.Start();
exeProcess.WaitForExit();
}
catch (Exception ex)
{
MessageBox.Show("ERROR EXECUTING: " + parameters + " " + ex.Message);
}
finally
{
exitCode = exeProcess.ExitCode;
}
Pool.Release();
}

}

我遇到的 3 个主要问题:

  1. 作业并不总是以正确的顺序开始(ListBox 中较低的一些项目在其他较高的项目之前开始)
  2. 有时启动的过程似乎停滞了,就好像它已经完成但窗口仍在屏幕上。这是一个非常一致的问题,但并非总是相同的任务/输入文件会停止。有时在之前的测试中表现良好的人会停滞不前,反之亦然。
  3. 我的笔记本电脑在测试这部分代码时重启了??

任何反馈、链接、示例将不胜感激。

最佳答案

  1. 无法保证线程实际启动的顺序。两个线程快速连续启动(在 Thread.Start() 意义上)很可能会经历“第二个”线程实际上在“第一个”之前开始执行。如果顺序执行很重要,您将需要序列化它们的执行(这似乎避免了启动多个线程的需要。)

  2. 我很好奇您是否确定所有进程都以正确的输入文件名启动。在我看来,您的委托(delegate)使用情况实际上可能会导致两个人使用同一个文件启动,我想知道这是否会导致您的第二个问题。

  3. 多久一次?您的计算机此时是否正在执行其他操作?您是否收到任何消息、BSOD 或任何形式的信息?这无论如何都是不正常的。

关于c# - 信号量和多线程处理 Process.Start 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com