C# Threading.Aussetzen Veraltet, thread ist veraltet?

In meiner Anwendung, ich trete meine Datei Lesen von einem anderen thread(andere, dass der GUI-thread). Es gibt zwei Schaltflächen, die suspend-und resume-Thread bzw.

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

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

aber ich bin mit dieser Warnung,

Thread.Auszusetzen, wurde abgelehnt. Verwenden Sie bitte einen anderen Klassen im System.Threading, wie Monitor, Mutex, Event und Semaphore zur Synchronisierung von Threads oder Ressourcen schützen. http://go.microsoft.com/fwlink/?linkid=14202

Alle, wie ich nur single-thread (und nicht als GUI-thread), also Wie kann ich die Synchronisierung hier, oder monitor.

Update-Code:

 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;
                //}
            }
        }       
    }

}

}

laufen bool-Wert, einen thread steuert es(Zunächst seine wahre)

und starten thread erstelle ich diese Klasse-Instanz(diese start-thread auch) in einer anderen Klasse

  • Aktualisieren Sie nicht zeigen: a) Wie der thread gestartet wird, b) die vollständige thread-Methode.
  • InvokeRequired ist immer wahr. Dein thread nichts nützliches, alles läuft auf dem UI-thread.
InformationsquelleAutor PawanS | 2010-12-22
Schreibe einen Kommentar