主頁 > .NET開發 > 緊急求救!關于Timer計時器觸發的問題

緊急求救!關于Timer計時器觸發的問題

2020-09-13 06:12:02 .NET開發

非IT從業人員,緊急求救各位大佬!
各位大佬,最近我用winform撰寫了一個利用NPOI讀取多個excel檔案的小程式,因為excel檔案有點多,就有點耗時,然后就想統計下NPOI讀取需要的時間,一開始我用form中的timer控制元件,發現觸發陳述句寫在主程式中可以觸發,但一旦寫在NPOI呼叫陳述句中時就無法觸發。我就換成了System.Timers來嘗試,發現在NPOI的陳述句中可以觸發,但是觸發后無法跨執行緒更新form中的label把時間現實出來。。。。

然后我又上網查,說跨執行緒更新UI需要用到委托,這是我的代碼
首先是添加system.timers類
  System.Timers.Timer timer = new System.Timers.Timer();
            timer.Enabled = true;
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer.AutoReset = true;
            timer.Interval = 500;
            timer.Enabled = true;

然后添加 Elapsed事件
 public void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            t = t + 1;//得到總的毫秒數   
            time = GetAllTime(t);//轉化成秒表
            this.SetText(time);
        }

其中GetTime是一個把計時由毫秒轉化成分,秒的函式
接著是創建委托和回呼函式
        }
        delegate void SetTextCallback(string x);
        private void SetText(string x)
        {
            //創建一個委托,用于封裝一個方法,在這里是封裝了 控制更新控制元件 的方法
            //System.Action invokeAction = new System.Action(ChangeControlsByTimer);

            //判斷操作控制元件的執行緒是否創建控制元件的執行緒
            //呼叫方位于創建控制元件所在的執行緒以外的執行緒中,如果在其他執行緒則對控制元件進行方法呼叫時必須呼叫 Invoke 方法
            if (this.label2.InvokeRequired)
            {
                //與呼叫執行緒不同的執行緒上創建(說明您必須通過 Invoke 方法對控制元件進行呼叫)
                SetTextCallback d = new SetTextCallback(SetText);
                this.label2.Invoke(d, new object[] {x });
            }
            else
            {
             
                label2.Text = x;
            }
        }
        public static string time;


做完了這些,最后我發現再我呼叫NPOI的時候依舊無法更新UI,呼叫結束才可以更新
timer啟動我寫在了NPOI的陳述句前面
  timer.Enabled = true;

            for (int j = 0; j < 12; j++)
            {
                IWorkbook workbook = null;
                FileStream fileStream = new FileStream(fileNames[j], FileMode.Open, FileAccess.Read);
                if (fileNames[j].IndexOf(".xlsx") > 0)
                {
                    //xlsx資料讀入workbook
                    workbook = new XSSFWorkbook(fileStream);
                }
                else if (fileNames[j].IndexOf(".xls") > 0)
                {
                    //xls資料讀入workbook
                    workbook = new HSSFWorkbook(fileStream);
                }

就是不成功,求救啊,大佬們
我是個學土木的
這幾天要弄死我了
分數都被坑人的CSDN坑光了,大佬們見諒

uj5u.com熱心網友回復:

沒有直接回答,不過統計用時不要用Timer,用System.Diagnostics.Stopwatch

uj5u.com熱心網友回復:

參考 1 樓 github_36000833的回復:
沒有直接回答,不過統計用時不要用Timer,用System.Diagnostics.Stopwatch

我查到過這個類,但是這個類可以時時計時么,我想要時時計時,還不是最后要一個總的時間

uj5u.com熱心網友回復:

有大佬么,求救啊

uj5u.com熱心網友回復:

有大佬么,求救啊

uj5u.com熱心網友回復:

因為NPOI讀取大量的Excel檔案時,會占用主執行緒,主執行緒一直被阻塞那UI就不會重繪了,所以如果需要大量的IO操作,你可以嘗試另外新建一個執行緒來進行讀取,或者嘗試學習async await方法來處理檔案操作。這樣就不會影響UI,同時你可以采用BeginInvoke來夸執行緒重繪界面

uj5u.com熱心網友回復:

多執行緒同步的問題,簡單點用backgroupwork控制元件,不用自己寫同步代碼,任務完成事件回傳。高級用thread,自己加鎖,也可以用task,async 方法。

uj5u.com熱心網友回復:

Timer控制元件適合做定時任務的觸發器,不適合做任務,會影響計時精度。因為Elapsed 事件是主執行緒中的呼叫的,不是Timer的計時執行緒,如果你一定要用Time,則需要在Elapsed 事件新建一個執行緒去處理任務。

uj5u.com熱心網友回復:

參考 5 樓 蝸牛慢慢趴的回復:
因為NPOI讀取大量的Excel檔案時,會占用主執行緒,主執行緒一直被阻塞那UI就不會重繪了,所以如果需要大量的IO操作,你可以嘗試另外新建一個執行緒來進行讀取,或者嘗試學習async await方法來處理檔案操作。這樣就不會影響UI,同時你可以采用BeginInvoke來夸執行緒重繪界面

感謝,如果我新建一個執行緒去做IO操做,又想事實記錄這段IO代碼的耗時,并實時顯示在UI中更新,應該怎么做呢,另外我總system.timer的時候,這個timer應該也不在主執行緒里吧

uj5u.com熱心網友回復:

參考 7 樓 icoolno1的回復:
Timer控制元件適合做定時任務的觸發器,不適合做任務,會影響計時精度。因為Elapsed 事件是主執行緒中的呼叫的,不是Timer的計時執行緒,如果你一定要用Time,則需要在Elapsed 事件新建一個執行緒去處理任務。

感謝,system.timer也是占用主執行緒的嗎?不是timer控制元件

uj5u.com熱心網友回復:

參考 6 樓 icoolno1的回復:
多執行緒同步的問題,簡單點用backgroupwork控制元件,不用自己寫同步代碼,任務完成事件回傳。高級用thread,自己加鎖,也可以用task,async 方法。

感謝,我要實作實時計時的話。需要怎么做呢,timer類可以實作么

uj5u.com熱心網友回復:

參考 9 樓 DQYDXT 的回復:
Quote: 參考 7 樓 icoolno1的回復:
Timer控制元件適合做定時任務的觸發器,不適合做任務,會影響計時精度。因為Elapsed 事件是主執行緒中的呼叫的,不是Timer的計時執行緒,如果你一定要用Time,則需要在Elapsed 事件新建一個執行緒去處理任務。

感謝,system.timer也是占用主執行緒的嗎?不是timer控制元件


差不多,都是定時觸發,在后臺起動一個執行緒,通過事件傳遞給創建這個Timer的執行緒。Timer的任務就是計時,要完成異步任務,得在事件中再開一個執行緒,這樣就影響主執行緒了。

uj5u.com熱心網友回復:

給你寫一個一遍執行阻塞任務一邊在控制臺顯示時間的 demo。你可以改輸出部分那一行代碼。
static async Task testc()
{
    var task1 = Task.Run(() => 顯示當前時間());
    var task2 = Task.Run(() => 你的阻塞任務());
    var t = await Task.WhenAny(task1, task2);
    if (t == task1)
        Console.WriteLine("task1完成了");
    else
        Console.WriteLine("task2完成了");
}

static void 顯示當前時間()
{
    for (var i = 1; i < 50; ++i)
    {
        Console.SetCursorPosition(0, Console.CursorTop);
        Console.Write($"{DateTime.Now.ToString("H:m:s.fff")}               ");
        Thread.Sleep(100);
    }
}

static void 你的阻塞任務()
{
    Thread.Sleep(6000);
}


以后我基本上都是僅在 demo 中向控制臺輸出,盡量不再寫 winform 等代碼了。因為我們的所有的服務器端產品代碼都將使用 standard 和 core(前端是 html/typescript 因此無法在這個寫),所以只能在控制臺上演示 .net 的 demo 了。

uj5u.com熱心網友回復:

使用 .net 現在的異步編程技術,那么許多“事件驅動”都可以改寫為接近順序語法的簡潔代碼了,對程式員的技術有新的要求。

這里,使用 Task.WhenAny 來等待第一個并發任務執行完畢,輸出“taskN完成了”的結果。

uj5u.com熱心網友回復:

還是簡單說一下吧:

1. 主執行緒應該讓它空著,這樣你的 winform 視窗才不會死掉。那么你的檔案轉換操作、時間顯示操作,如果它們不麻煩地“混合分時設計”而是各自是一個獨立操作回圈,那么就必須在主執行緒之外啟動兩個子執行緒。

2. 忘掉 Thread 物件,學習使用 Task。這里邊的知識,可以在你找作業或者招聘時,秒殺或者刷掉傳統 .net 程式員。因為現在 Task 這方面的編程很多。

3. 可以考慮一旦使用 .net core 撰寫服務器端,前端使用純 web 開發時該如何分離前后端程式進行設計和通訊。而 Excel 檔案是服務器端任務,發起任務和等待時間的顯示是前端(web)任務。

uj5u.com熱心網友回復:

現在一般都是用的Task,簡單易用

uj5u.com熱心網友回復:

兩個問題:
1、計時器問題,建議使用 System.Diagnostics.StopWatch,可精確到 100ns;Timer 是定時器,不是計時器,另外 Timer 有兩個(System.Windows.Forms 命名空間和 System.Timers 命名空間,這兩個定時器需要區分使用,使用不當會有問題)
2、UI 界面重繪問題,非 UI 執行緒的代碼想要呼叫 UI 界面的組件,需要使用 Invoke 方式

了解上述問題后再處理細節,可以避免走彎路。
至于上述問題的具體原理,請自行百度。

uj5u.com熱心網友回復:

參考 16 樓 datafansbj 的回復:
兩個問題:
1、計時器問題,建議使用 System.Diagnostics.StopWatch,可精確到 100ns;Timer 是定時器,不是計時器,另外 Timer 有兩個(System.Windows.Forms 命名空間和 System.Timers 命名空間,這兩個定時器需要區分使用,使用不當會有問題)
2、UI 界面重繪問題,非 UI 執行緒的代碼想要呼叫 UI 界面的組件,需要使用 Invoke 方式

了解上述問題后再處理細節,可以避免走彎路。
至于上述問題的具體原理,請自行百度。

感謝,那請問假如我用System.Diagnostics.StopWatch來計時的話,System.Diagnostics.StopWatch這個類是運行在主執行緒上,還是他也會自己另開一個執行緒呢

uj5u.com熱心網友回復:

參考 12 樓 以專業開發人員為伍 的回復:
給你寫一個一遍執行阻塞任務一邊在控制臺顯示時間的 demo。你可以改輸出部分那一行代碼。
static async Task testc()
{
    var task1 = Task.Run(() => 顯示當前時間());
    var task2 = Task.Run(() => 你的阻塞任務());
    var t = await Task.WhenAny(task1, task2);
    if (t == task1)
        Console.WriteLine("task1完成了");
    else
        Console.WriteLine("task2完成了");
}



static void 顯示當前時間()
{
    for (var i = 1; i < 50; ++i)
    {
        Console.SetCursorPosition(0, Console.CursorTop);
        Console.Write($"{DateTime.Now.ToString("H:m:s.fff")}               ");
        Thread.Sleep(100);
    }
}

static void 你的阻塞任務()
{
    Thread.Sleep(6000);
}


以后我基本上都是僅在 demo 中向控制臺輸出,盡量不再寫 winform 等代碼了。因為我們的所有的服務器端產品代碼都將使用 standard 和 core(前端是 html/typescript 因此無法在這個寫),所以只能在控制臺上演示 .net 的 demo 了。

感謝,跨執行緒更改UI我基本明白了,那請問需要知道一段代碼運行的時間,并實時顯示,該怎么操作呢

uj5u.com熱心網友回復:

參考 16 樓 datafansbj 的回復:
兩個問題:
1、計時器問題,建議使用 System.Diagnostics.StopWatch,可精確到 100ns;Timer 是定時器,不是計時器,另外 Timer 有兩個(System.Windows.Forms 命名空間和 System.Timers 命名空間,這兩個定時器需要區分使用,使用不當會有問題)
2、UI 界面重繪問題,非 UI 執行緒的代碼想要呼叫 UI 界面的組件,需要使用 Invoke 方式

了解上述問題后再處理細節,可以避免走彎路。
至于上述問題的具體原理,請自行百度。

如果我要在label上實時顯示計時,類似于秒表,實時重繪label,StopWatch怎么用呢

uj5u.com熱心網友回復:

參考 17 樓 DQYDXT 的回復:
Quote: 參考 16 樓 datafansbj 的回復:
兩個問題:
1、計時器問題,建議使用 System.Diagnostics.StopWatch,可精確到 100ns;Timer 是定時器,不是計時器,另外 Timer 有兩個(System.Windows.Forms 命名空間和 System.Timers 命名空間,這兩個定時器需要區分使用,使用不當會有問題)
2、UI 界面重繪問題,非 UI 執行緒的代碼想要呼叫 UI 界面的組件,需要使用 Invoke 方式

了解上述問題后再處理細節,可以避免走彎路。
至于上述問題的具體原理,請自行百度。

感謝,那請問假如我用System.Diagnostics.StopWatch來計時的話,System.Diagnostics.StopWatch這個類是運行在主執行緒上,還是他也會自己另開一個執行緒呢


System.Diagnostics.StopWatch 運行在系統底層,不在你的執行緒里(類似 CPU 時鐘,始終在跑,完全獨立于你的執行緒)。

uj5u.com熱心網友回復:

參考 17 樓 DQYDXT 的回復:
感謝,那請問假如我用System.Diagnostics.StopWatch來計時的話,System.Diagnostics.StopWatch這個類是運行在主執行緒上,還是他也會自己另開一個執行緒呢


時間關系,我沒有太仔細看你的頂樓上寫的問題。我印象中你是要在呼叫 NPOI 操作程序中去顯示一個計時跳動(過了多少分多少秒),這個就是使用
var show = Datetime.Now.Substract(startTime).ToString("m分s秒");
這類代碼就行了,可以不使用 StopWatch。

uj5u.com熱心網友回復:

參考 19 樓 DQYDXT 的回復:
Quote: 參考 16 樓 datafansbj 的回復:
兩個問題:
1、計時器問題,建議使用 System.Diagnostics.StopWatch,可精確到 100ns;Timer 是定時器,不是計時器,另外 Timer 有兩個(System.Windows.Forms 命名空間和 System.Timers 命名空間,這兩個定時器需要區分使用,使用不當會有問題)
2、UI 界面重繪問題,非 UI 執行緒的代碼想要呼叫 UI 界面的組件,需要使用 Invoke 方式

了解上述問題后再處理細節,可以避免走彎路。
至于上述問題的具體原理,請自行百度。

如果我要在label上實時顯示計時,類似于秒表,實時重繪label,StopWatch怎么用呢


在回圈前獲取開始時間戳,在回圈里獲得新的時間戳,兩者相級訓取時間差,將時間差賦值給 Label 即可(如果跨執行緒,應使用 Invoke)。

uj5u.com熱心網友回復:

嗯,上邊的 ToString 的格式化寫錯了。我給你寫個完整點兒的 dmeo 吧
class Session
{
    public bool 是否停止;
}

static async Task testc()
{
    var flag = new Session();
    var task1 = Task.Run(() => 顯示當前時間(flag));
    var task2 = Task.Run(() => 你的阻塞任務());
    var t = await Task.WhenAny(task1, task2);
    Console.WriteLine("task1完成了");
    flag.是否停止 = true;
}

static void 顯示當前時間(Session s)
{
    var startTime = DateTime.Now;
    while (!s.是否停止)
    {
        Console.SetCursorPosition(0, Console.CursorTop);
        var t = DateTime.Now.Subtract(startTime);
        Console.Write($"{t.Minutes}分{t.Seconds}秒{t.Milliseconds}毫秒               ");
        Thread.Sleep(1000);
    }
    Console.WriteLine("計時停止");
}

static void 你的阻塞任務()
{
    Thread.Sleep(6000);
}

uj5u.com熱心網友回復:

參考 13 樓 以專業開發人員為伍 的回復:
使用 .net 現在的異步編程技術,那么許多“事件驅動”都可以改寫為接近順序語法的簡潔代碼了,對程式員的技術有新的要求。

這里,使用 Task.WhenAny 來等待第一個并發任務執行完畢,輸出“taskN完成了”的結果。

感謝大佬詳細的回復,
await我之前寫過一個小程式,想要異步通過com的方式讀取word,但是無論我怎么做,主界面還是卡,這里OpenWord1()是我寫在公共類中的一段打開word讀取資料的陳述句,不知道有什么問題

uj5u.com熱心網友回復:

參考 24 樓 DQYDXT 的回復:
Quote: 參考 13 樓 以專業開發人員為伍 的回復:
使用 .net 現在的異步編程技術,那么許多“事件驅動”都可以改寫為接近順序語法的簡潔代碼了,對程式員的技術有新的要求。

這里,使用 Task.WhenAny 來等待第一個并發任務執行完畢,輸出“taskN完成了”的結果。

感謝大佬詳細的回復,
await我之前寫過一個小程式,想要異步通過com的方式讀取word,但是無論我怎么做,主界面還是卡,這里OpenWord1()是我寫在公共類中的一段打開word讀取資料的陳述句,不知道有什么問題

你這里沒有用async ,你應該再開一個專門的執行緒來處理吧,不應該讓主執行緒卡在這里

uj5u.com熱心網友回復:

微軟 Office 等 COM 組件雖然功能很強,但是是比較古老的,微軟也沒有改為 .net 等等底層機制(估計現在的也沒20年前微軟的本事去改)。這類 COM 組件絕大部分是“必須”在 UI 主執行緒呼叫的,否則可能會沒有回應、或者卡死主執行緒數分鐘、或者直接讓行程崩潰,總之 COM 的“地獄問題”很難解決。呼叫它們的時候就需要注意在 UI 主執行緒呼叫,分時呼叫,盡量使用高效率的陳述句(例如傳送一批資料給 Excel 單元格應該使用“一條”二維陣列賦值陳述句賦值而不是分別一個一個單元格賦值。使用復雜 COM 功能時跟考慮這個帖子的問題是不一樣的!

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/21145.html

標籤:C#

上一篇:WPF 如何自定義 TabControl 第一個 Tab頁在左側,其余Tab頁居中

下一篇:vb.net修改資訊時只要是另一個表的主鍵就無法修改(特別急!)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more