如何暂停当前正在运行的进程

时间:2012-10-26 05:41:20

标签: c#

我开发了一个套接字程序。我遇到客户端套接字程序的问题,它从多个服务器获取数据,一次一个,并更新listview中的详细信息。它发生在无限循环中。

while(true) 
{

}

我想在中期退出这个循环,我使用按钮点击事件来做那个

foreach (Process myProc in Process.GetProcesses())
{
    if (myProc.ProcessName == "procees name")
    {
        myProc.Kill();
    }
}

但它太慢了,我想暂停这个过程并杀死它。帮我暂停当前正在运行的过程。

5 个答案:

答案 0 :(得分:0)

暂停运行过程没有这样的功能,所以答案是否定的。

如果可以,您可以更改每个流程,这是所有软件构建商都试图阻止的。

你需要一些方法。

但是,如果你有时间可以试试 http://www.c-sharpcorner.com/uploadfile/mmehta/multithreading311162005045743am/multithreading3.aspx

http://www.codeproject.com/Articles/2042/Using-events-for-thread-synchronization

答案 1 :(得分:0)

如果您想要处理多个同时套接字连接,我建议您使用SocketAsyncEventArgs而不是传统的while (true)

看一下这篇文章:

while循环通常带来的最简单(但不完美)的解决方案是这样的:

private volatile bool _running = true;

...

while (_running)
{
    // Do stuff
}

...

public void ButtonClick(object sender, EventArgs e)
{
    _running = false;
}

答案 2 :(得分:0)

由于您提到该流程是您自己的应用程序,您可以自行退出应用程序而不是终止应用程序。你的问题更多的是“如何退出我的程序”。

首先,由于您运行的是无限循环,因此您的按钮似乎无法响应。这样做的一种(坏)方式是这样的:

private bool _exit = false; //member variable
while(true && !_exit) 
{
    Application.DoEvents();
}

Application.DoEvents对于让您的应用程序继续收听其他操作非常重要。然后,

private void btn_Click(object sender, EventArgs e)
{
    _exit = true;
}

imo的理想方式是将数据从服务器转移到后台进程。可能是这样的:

BackgroundWorker _backgroundWorker = new BackgroundWorker(); //member field

void Listen()
{
   _backgroundWorker.WorkerSupportsCancellation = true;
   _backgroundWorker.WorkerReportsProgress = true;
   _backgroundWorker.DoWork += (sender, e) => { while(condition)//bla bla; }
   _backgroundWorker.RunWorkerAsync();
}

然后取消点击,

private void btn_Click(object sender, EventArgs e)
{
    _backgroundWorker.CancelAsync();
}

答案 3 :(得分:0)

根据您的应用程序(多少个线程,ui库),您可以使用 Application.Exit。也许您应该在创建工作线程时设置IsBackground属性。

想象一下如果可以暂停这个过程会发生什么。用户单击该按钮,您的程序将暂停当前进程,而无需执行任何操作,因为您只是暂停了自己。杀死进程的代码永远不会运行。

答案 4 :(得分:0)