Как остановить многопоточность с помощью кнопки GUI
При совместном использовании Winform и Multithread поток завершался кнопкой. Вы должны нажать кнопку несколько раз, чтобы выйти.
Программа, кажется, пропустила событие кнопки. Разве программа не может ответить на щелчок один?
Извините, я не очень хорошо говорю по-английски.
Что я уже пробовал:
using System; using System.IO; using System.Net; using System.Threading; using System.Net.Sockets; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Client { public partial class Client : Form { Thread _clitThread; uint counter = 0; private bool stopEvt = false; private bool run = false; public delegate void LogWriteDelegate(string msg); public Client() { InitializeComponent(); } private void btnConn_Click(object sender, EventArgs e) { run = true; _clitThread = new Thread(new ThreadStart(ClientReceive)); _clitThread.IsBackground = true; _clitThread.Start(); } public void MessageWrite(string msg) { LogWriteDelegate deleLogWirte = new LogWriteDelegate(AppendMsg); this.Invoke(deleLogWirte, new object[] { msg }); } public void AppendMsg(string msg) { txtOutput.AppendText(msg + "\r\n"); txtOutput.Focus(); txtOutput.ScrollToCaret(); } private void ClientReceive() { try { while (run) { Thread.Sleep(100); MessageWrite((++counter).ToString()); } } catch (Exception ex) { MessageWrite(ex.ToString()); } finally { } } private void BtnStop_Click(object sender, EventArgs e) { stopEvt = true; run = false; if (_clitThread != null && _clitThread.IsAlive) { try { _clitThread.Join(10); _clitThread = null; stopEvt = false; MessageWrite("stop thread"); } catch (Exception ex) { MessageWrite(ex.ToString()); } } } } }
BillWoodruff
Вы пробовали использовать нить?Прерывание, за которым следует поток.Остановиться ? Или, попробовал нить.Прервать ?
Member 14509405
Это похоже на результат прерывания, прерывания.