gpt4 book ai didi

c# - 如何在与主窗体类不同的类中执行特定于函数的方法? (C#)

转载 作者:太空宇宙 更新时间:2023-11-03 20:35:09 25 4
gpt4 key购买 nike

可能是我对多态性或接口(interface)继承等一些关键编程概念缺乏认识。这应该很容易。我是新手。

我在 C# 程序中有一个名为 tts 的单独类。现在我在其中定义了一个函数,叫做 speak。这是它:

class tts

{

public void speak()
{

Process process1 = new Process();
process1.StartInfo.FileName = "C:\\Program Files\\eSpeak\\command_line\\espeak.exe";
process1.StartInfo.Arguments = "hello";

process1.StartInfo.UseShellExecute = false;
process1.StartInfo.CreateNoWindow = true;

process1.Start();
//process1.Kill();
}
}

当我在事件 (listBox1_SelectedIndexChange) 下从主窗体调用此函数时,它运行良好。每当我滚动列表框时,这个程序都会读“你好”。但是当我滚动到列表框中的下一项时,我想终止 process1。当我在 speak 函数中实现 process1.Kill()(通过取消注释 kill 方法)时,程序不会读取“hello”。发生的事情是 process1 立即被杀死。所以我不会在 speak 函数下实现方法 Kill() 。但是当我更改列表框的索引 (listBox1_SelectedIndexChange) 时,我想从主窗体中终止 process1。这是我的主要表单代码。

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
tts obj = new tts();
obj.speak();
}

我想做的是:

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
tts obj = new tts();
obj.speak();
process1.Kill();
}

这当然是行不通的,因为 process1 在 tts 类中的函数 speak 范围内。如何从主窗体执行 process1.Kill()

我更喜欢基本代码本身,而不是关于要做什么的技术术语。

最佳答案

你可以做的一件事是创建单独的类来管理进程

下面是示例代码:

class processmanagement
{
Process p;

public Process startprocess()
{
p = new Process();
}

public void killprocess(Process p1)
{
p = p1;
if(p!=null)
p.kill();
}
}

class processmanagement
{
Process p;

public void startprocess()
{
p = new Process();
}

public void killprocess()
{
if(p!=null)
p.kill();
}
}

关于c# - 如何在与主窗体类不同的类中执行特定于函数的方法? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5322085/

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