欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#在新建線程中使用Timer無(wú)效問(wèn)題及解決

 更新時(shí)間:2022年08月12日 11:26:41   作者:小葉要學(xué)習(xí)  
這篇文章主要介紹了C#在新建線程中使用Timer無(wú)效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在新建線程中使用Timer無(wú)效

在C#winform窗體設(shè)計(jì)中,我們像重復(fù)運(yùn)行某一功能時(shí),我們想到的就是使用C#的Timer控件,但如果這個(gè)功能執(zhí)行一次需要較長(zhǎng)時(shí)間時(shí),就會(huì)占用UI線程,從而會(huì)出現(xiàn)窗體上的控件無(wú)法選中或點(diǎn)擊。這個(gè)問(wèn)題可以通過(guò)多線程來(lái)解決,但在多線程中,會(huì)出現(xiàn)timer控件無(wú)效的問(wèn)題。

首先,我們?cè)诖绑w設(shè)計(jì)頁(yè)面上選擇的timer控件,是屬于System.Windows.Forms.Timer類,這個(gè)類是無(wú)法在開(kāi)辟的新線程中使用的。

若想在thread中使用,我們要用到System.Timers.Timer類的timer定時(shí)器,具體操作如下。

第一步

添加System.Timers.Timer模塊和線程模塊

using System.Timers;
using System.Threading;

第二步

新建一個(gè) System.Timers類的timer定時(shí)器和新線程

// 新建一個(gè)System.Timers類的定時(shí)器
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 100; // 定時(shí)器的運(yùn)行周期(ms)
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); // 添加調(diào)用函數(shù)
 
void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    // 定時(shí)器執(zhí)行的語(yǔ)句
}
 
Thread t1 = new Thread(new ThreadStart(t1_Run)); // 實(shí)例化新線程
t1.Start();
 
private void t1_Run()
{
    timer2.Enabled = true; // 定時(shí)器開(kāi)啟
}

C# Timer無(wú)法停止的解決

在用Winform做一個(gè)網(wǎng)絡(luò)爬蟲(chóng)的時(shí)候發(fā)現(xiàn)C#里頭Timer調(diào)用Stop()函數(shù)卻無(wú)停止的問(wèn)題。

在網(wǎng)上找,似乎說(shuō)問(wèn)題與線程池有關(guān)。我對(duì)線程的使用很不熟練,所以也看不明白網(wǎng)上調(diào)用線程的方法。

還好在一篇帖子的回復(fù)里找到了一個(gè)簡(jiǎn)單的解決方法,就是在Elapse調(diào)用的方法里一開(kāi)始就調(diào)用timer.stop(),結(jié)尾再調(diào)用一次timer.start();

問(wèn)題果然解決了

public void main(){
? ? myTimer = new System.Timer.Timer(LOOP_INTERVAL);
? ? myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myElapse);
? ? myTimer.Enabled = true; //myTimer啟動(dòng)
}
public void myElapse(object sender, System.Timers.ElapsedEventArgs e){
? ? myTimer.Stop();
? ? ...
? ? myTimer.Start();
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • 深入c# Func委托的詳解

    深入c# Func委托的詳解

    本篇文章是對(duì)c#中的Func委托進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • C#實(shí)現(xiàn)將網(wǎng)址生成二維碼圖片方法介紹

    C#實(shí)現(xiàn)將網(wǎng)址生成二維碼圖片方法介紹

    這篇文章介紹了C#實(shí)現(xiàn)將網(wǎng)址生成二維碼圖片的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 如何使用C# Stopwatch 測(cè)量微秒級(jí)精確度

    如何使用C# Stopwatch 測(cè)量微秒級(jí)精確度

    這篇文章主要介紹了如何使用C# Stopwatch 測(cè)量微秒精確度,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#連接藍(lán)牙設(shè)備的實(shí)現(xiàn)示例

    C#連接藍(lán)牙設(shè)備的實(shí)現(xiàn)示例

    本文主要介紹了C#連接藍(lán)牙設(shè)備的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • C#實(shí)現(xiàn)Stream與byte[]之間的轉(zhuǎn)換實(shí)例教程

    C#實(shí)現(xiàn)Stream與byte[]之間的轉(zhuǎn)換實(shí)例教程

    這篇文章主要介紹了C#實(shí)現(xiàn)Stream與byte[]之間的轉(zhuǎn)換方法,具體講解了二進(jìn)制轉(zhuǎn)換成圖片、byte[]與string的轉(zhuǎn)換、Stream 和 byte[] 之間的轉(zhuǎn)換、Stream 和 文件之間的轉(zhuǎn)換、從文件讀取 Stream以及Bitmap 轉(zhuǎn)化為 Byte[]等,需要的朋友可以參考下
    2014-09-09
  • 詳細(xì)分析c# 客戶端內(nèi)存優(yōu)化

    詳細(xì)分析c# 客戶端內(nèi)存優(yōu)化

    這篇文章主要介紹了c# 客戶端內(nèi)存優(yōu)化的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#實(shí)現(xiàn)調(diào)用迅雷下載的方法

    C#實(shí)現(xiàn)調(diào)用迅雷下載的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)調(diào)用迅雷下載的方法,非常實(shí)用的一個(gè)技巧,對(duì)于進(jìn)行C#程序設(shè)計(jì)有很好的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C#在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建類型的實(shí)現(xiàn)方法

    C#在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建類型的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建類型的實(shí)現(xiàn)方法,主要通過(guò)動(dòng)態(tài)生成C#代碼再編譯成程序集來(lái)實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類型的,需要的朋友可以參考下
    2014-09-09
  • c# 值類型實(shí)例構(gòu)造器

    c# 值類型實(shí)例構(gòu)造器

    CLR總是允許創(chuàng)建值類型的實(shí)例。另外值類型不一定需要定義構(gòu)造器,c#編譯器不會(huì)為值類型生成默認(rèn)的無(wú)參構(gòu)造器
    2012-10-10
  • c#的dataset離線數(shù)據(jù)集示例

    c#的dataset離線數(shù)據(jù)集示例

    這篇文章主要介紹了c#的dataset離線數(shù)據(jù)集示例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論