プロセスは独自のアプリケーションであると述べているので、アプリケーションを強制終了する代わりに、自分でアプリケーションを終了することができます。あなたの質問は、「どうすればプログラムを終了できますか」ということになります。
まず、無限ループを実行しているため、ボタンが応答しないように見える場合があります。それを行う1つの(悪い)方法は次のようなものです:
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();
}