Size: a a a

2019 September 27

NK

ID:923479691 in CODE BLOG / C#
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
   public partial class Form1 : Form
   {
       private Thread thread;
       private bool start = true; // Флаг для выхода из цикла

       private void listener() //Потоковый метод
       {
           int count = 0;

           while (start)
           {
               count++;

               if (InvokeRequired)
               { //Инвок
                   Invoke(new Action(() =>
                   {
                       Log.Text += count.ToString() + "\r\n"; //Обращаемся к текстовому полю, что в основном потоке
                   }));
               }
           };
       }

       public Form1()
       {
           InitializeComponent();
       }

       private void Form1_Load(object sender, EventArgs e)
       {
           thread = new Thread(listener);
           thread.IsBackground = true;
           thread.Start();
       }

       private void Form1_FormClosing(object sender, FormClosingEventArgs e)
       {
           start = false;
          // if (thread.IsAlive) // Если поток жив, ликвидируем его.
         //  {
         //      thread.Abort();
         //  }
       }
   }
}
источник

NK

ID:923479691 in CODE BLOG / C#
Кстати, а каким образом флаг вообще виден? Он же в основном потоке объявлен?
источник

ch

central hardware in CODE BLOG / C#
ID:923479691
Через thread
Без комментариев
источник

NK

ID:923479691 in CODE BLOG / C#
Ну уж нет, давай коммментируй.  )))))
источник

ch

central hardware in CODE BLOG / C#
ID:923479691
Ну уж нет, давай коммментируй.  )))))
Ui однопоточный
источник

SB

Sergey Benzenko in CODE BLOG / C#
Рискну предположить, что поскольку вы передаёте в поток listener (метод формы), то поля формы захватываются. Другое дело, что после закрытия и уничтожения формы вообще хрен знает, чему там в потоке будет равен start. Тем более, start относится к форме, а значения вы задаёте элементам формы (то есть другим объектам). Возможно, при FormClosing форма ещё существует, а текстовое поле уже нет
источник

NK

ID:923479691 in CODE BLOG / C#
Понял Вас...
источник

SB

Sergey Benzenko in CODE BLOG / C#
ID:923479691
Кстати, а каким образом флаг вообще виден? Он же в основном потоке объявлен?
Именно поэтому лучше использовать Task и токен отмены, потому что этот объект предназначен именно для того, что вы хотите сделать (прекратить операцию)
источник

NK

ID:923479691 in CODE BLOG / C#
Поля формы захватываются через Invoke. Кстати старт виден.... На кнопке он же работает и останавливает.
источник

NK

ID:923479691 in CODE BLOG / C#
Но даже проверка на IsDisposed НЕ помогает.
источник

SB

Sergey Benzenko in CODE BLOG / C#
ID:923479691
Поля формы захватываются через Invoke. Кстати старт виден.... На кнопке он же работает и останавливает.
Он ошибку выдаёт? Если да, засуньте Invoke в try ... catch и при ошибке выходите из цикла
источник

АК

Андрей Кирсанов... in CODE BLOG / C#
Господа программисты. Я в этом языке ещё нуб и у меня есть вопрос по коду (в инете не нашёл). Код сюда в чистом виде кидать или через что?
источник

ℬoʀsuk7 in CODE BLOG / C#
Андрей Кирсанов
Господа программисты. Я в этом языке ещё нуб и у меня есть вопрос по коду (в инете не нашёл). Код сюда в чистом виде кидать или через что?
PasteBin/git
источник

АК

Андрей Кирсанов... in CODE BLOG / C#
ок
источник

NK

ID:923479691 in CODE BLOG / C#
Sergey Benzenko
Он ошибку выдаёт? Если да, засуньте Invoke в try ... catch и при ошибке выходите из цикла
Через трай даже из цикла выходить не обязательно. Исключение есть исключение)).
источник

I

Ivan in CODE BLOG / C#
ℬoʀsuk7
PasteBin/git
источник

АК

Андрей Кирсанов... in CODE BLOG / C#
https://pastebin.com/SJVfMJTY - помогите пожалуйста, я не могу понять почему оно не воспринимаете методы которые вызываються внутри if и пишет main.cs(42,17): error CS0103: The name `change' does not exist in the current context
main.cs(43,35): error CS0103: The name `count' does not exist in the current context
main.cs(46,17): error CS0103: The name `change' does not exist in the current context
main.cs(48,24): error CS0103: The name `count' does not exist in the current context
источник

I

Ivan in CODE BLOG / C#
Андрей Кирсанов
https://pastebin.com/SJVfMJTY - помогите пожалуйста, я не могу понять почему оно не воспринимаете методы которые вызываються внутри if и пишет main.cs(42,17): error CS0103: The name `change' does not exist in the current context
main.cs(43,35): error CS0103: The name `count' does not exist in the current context
main.cs(46,17): error CS0103: The name `change' does not exist in the current context
main.cs(48,24): error CS0103: The name `count' does not exist in the current context
это методы класса
источник

ℬoʀsuk7 in CODE BLOG / C#
Андрей Кирсанов
https://pastebin.com/SJVfMJTY - помогите пожалуйста, я не могу понять почему оно не воспринимаете методы которые вызываються внутри if и пишет main.cs(42,17): error CS0103: The name `change' does not exist in the current context
main.cs(43,35): error CS0103: The name `count' does not exist in the current context
main.cs(46,17): error CS0103: The name `change' does not exist in the current context
main.cs(48,24): error CS0103: The name `count' does not exist in the current context
Ем
источник

I

Ivan in CODE BLOG / C#
создай экземрляр контроллера и на нем вызывай
источник