簡體   English   中英

線程開始停止c#WinForm

[英]thread start stop c# WinForm

背景:在C#WinForm中,我使用了幾個這樣的線程

private Thread Thread1;
Thread1 = new Thread(new ThreadStart(DoSomething));
Thread1.Start();

我想設置一個計時器,以每小時停止/殺死Thread1,然后重新啟動一個新的Thread1,如下所示:

Abort/Kill Thread1;
Thread1 = new Thread(new ThreadStart(DoSomething));
Thread1.Start();

那么,如何在不重新啟動Winform的情況下殺死thread1並重新啟動一個新線程呢?

謝謝您的答復。 我非常感謝

這是一個樣本。

    private void button1_Click(object sender, EventArgs e) {

        var i = 0;
        Action DoSomething = () => {
            while (true) {
                (++i).ToString();
                Thread.Sleep(100);
            }
        };

        Thread Thread1;
        Thread1 = new Thread(new ThreadStart(DoSomething));
        Thread1.Start();

        Thread.Sleep(1000);
        Text = i.ToString();

        Thread1.Abort();
        Thread1 = new Thread(new ThreadStart(DoSomething));
        Thread1.Start();

    }

我不建議使用Thread.Abort方法。
如果可能,設計可以阻止安全的螺紋。 並使用Join方法。

    private void button2_Click(object sender, EventArgs e) {

        // the flag, to stop the thread outside.
        var needStop = false;

        var i = 0;
        Action DoSomething = () => {
            while (!needStop) {
                (++i).ToString();
                Thread.Sleep(100);
            }
        };


        Thread Thread1;
        Thread1 = new Thread(new ThreadStart(DoSomething));
        Thread1.Start();

        Thread.Sleep(1000);
        Text = i.ToString();

        // change flag to stop.
        needStop = true;
        // wait until thread stop.
        Thread1.Join();

        // start new thread.
        Thread1 = new Thread(new ThreadStart(DoSomething));
        Thread1.Start();

        // needStop = true;
        // Thread1.Join();
    }

您可以通過在DoSomething中創建一個while循環來實現,該循環基於易失性布爾值繼續。 請在此處查看Groo的答案:

重新啟動.NET中的線程(使用C#)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM