可能是我对多态性或接口(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/