C # Threading. Приостановить в устаревшем, поток устарел?

В моем приложении я выполняю чтение файла другим потоком (кроме потока GUI). Есть две кнопки, которые приостанавливают и возобновляют поток соответственно.

private void BtnStopAutoUpd_Click(object sender, EventArgs e)
        {
           autoReadThread.Suspend();
        }

private void BtnStartAutoUpd_Click(object sender, EventArgs e)
        {
           autoReadThread.Resume();  
        }

но я столкнулся с этим предупреждение,

Thread.Suspend устарел. Используйте другие классы в System.Threading, такие как Monitor, Mutex, Event и Semaphore, для синхронизации потоков или защиты ресурсов. http://go.microsoft. com / fwlink /? linkid = 14202

Каким-либо образом я запускаю только один поток (а не поток графического интерфейса пользователя), поэтому как я могу применить здесь синхронизацию или контролировать.

Код обновления:

 class ThreadClass
{

    // This delegate enables asynchronous calls for setting the text property on a richTextBox control.
    delegate void UpdateTextCallback(object text);

    // create thread that perform actual task
    public Thread autoReadThread = null;

    public ManualResetEvent _event = new ManualResetEvent(true);

    // a new reference to rich text box
    System.Windows.Forms.RichTextBox Textbox = null;

    private volatile bool _run;

    public bool Run
    {
        get { return _run; }
        set { _run = value; }
    }

    public ThreadClass(string name, System.Windows.Forms.RichTextBox r1)
    {
        Textbox = r1;
        Run = true;
        this.autoReadThread = new Thread(new ParameterizedThreadStart(UpdateText));
        this.autoReadThread.Start(name);
    }

    private void UpdateText(object fileName)
    {

        //while (true)
        //{
        //    _event.WaitOne();
            while (Run)
            {

                if (Textbox.InvokeRequired)
                {
                    UpdateTextCallback back = new UpdateTextCallback(UpdateText);
                    Textbox.BeginInvoke(back, new object[] { fileName });
                    Thread.Sleep(1000);
                }

                else
                {
                    string fileToUpdate = (string)fileName;
                    using (StreamReader readerStream = new StreamReader(fileToUpdate))
                    {
                        Textbox.Text = readerStream.ReadToEnd();
                    }
                    break;
                //}
            }
        }       
    }

}

}

run - это логическое значение, поток управляет им (изначально его истинное значение)

, и для запуска потока я создаю этот экземпляр класса (также этот начальный поток) в другом классе

11
задан PawanS 22 December 2010 в 14:00
поделиться