1. 程式人生 > 實用技巧 >在c#中使用非同步等待構建響應式UI

在c#中使用非同步等待構建響應式UI

1、qt4.7以前版本處理方式,多執行緒的使用

  1、自定義一個類,繼承於QThread,

class MyThread : public QThread
{
    publicvoid run();     // 多工執行函式
   
    signals:
        void isDone();   // 處理完成後需要傳送訊號需要知道,執行緒處理完成任務
}
void run()   // 函式實現
{
    // 處理複雜任務
   // 傳送訊號  任務處理完成
    emit isDone();
}

    

  2、使用的地方需要建立一個類物件

MyThread thread;


// 在需要多工的地方啟動執行緒 // 不可以直接掉用run() // start() 間接呼叫run() thread.start(); // 啟動執行緒

3、執行緒使用

  1、建立一個類繼承QThread

#include <QThread>

class myThread : public QThread
{

protected:
    void run();  // 重寫虛擬函式 執行緒的入口函式
signals:
    void isDone();  // 發訊號 說明執行緒結束了
};

  2、實現run()函式

void myThread::run()
{
    qDebug() 
<< ";正在睡覺"; sleep(5); // 任務處理程式碼 emit isDone(); // 傳送訊號 說明該執行緒結束了 }

  3、執行緒啟動,轉去執行run()

void Widget::on_buttonStart_clicked()
{
    if(myTimer->isActive() == false)
    {
        myTimer->start(100);
    }
    // 需要多執行緒的地方 啟動執行緒
    thread->start();   // 啟動執行緒
}

  4、等待run()發出執行緒結束訊號,並處理訊號

thread = new myThread(this);
// 處理執行緒結束訊號標誌
connect(thread,&myThread::isDone,this,&Widget::dealPmythread);

  5、執行緒結束處理

void Widget::dealPmythread()
{
    qDebug() << "deal over";
    myTimer->stop();   // 執行緒結束了 進一步處理
}

  6、釋放執行緒資源

// 視窗右上角X 關閉時,發出訊號處理, 釋放執行緒資源
    connect(this,&Widget::destroyed,this,&Widget::closeThread);

  7、釋放執行緒 函式實現

void Widget::closeThread()
{
    thread->quit();   // 關閉執行緒
    thread->wait();   // 等待執行緒處理完資源
}