[食譜好菜] 殺雞焉用牛刀,想做關鍵字搜尋 Windows Search Service 一樣嚇嚇叫。

最近手上的專案有一個需求,使用者想對上傳的檔案(簡報、會議記錄、...等)做關鍵字搜尋,腦中閃過的第一個解決方案是 Elasticsearch(ES),但是這得額外架設服務、撰寫程式將檔案內容送進 ES 做索引,要花錢、花時間,使用者不一定買單,所以我就想到 Windows 檔案總管的搜尋功能能不能拿來用?它背後使用的服務是 Windows Search Service(WSS),下關鍵字去 Google 馬上就找到黑大的文章,感謝黑大。

...繼續閱讀 »

[料理佳餚] Windows Forms 三種 Binding 的連動方式:TwoWayBinding、OneWayBinding、OneWayToSourceBinding

日常的工作當中,還是難免遇到需要維護 Windows Forms 的程式,基本上 Windows Forms 控制項的互動能夠用 Binding 的方式去處理,我就儘量用 Binding 的方式去處理,讓我自己能夠有更多的精神放在商業邏輯上,這篇文章想跟大家分享 Windows Forms 的三種 Binding 的連動方式。

...繼續閱讀 »

[食譜好菜] C# 複製 HTML 格式的文字到剪貼薄中

部落格的文章我一直是用 Markdown Monster 寫完後,直接 Ctrl + Shift + C,Markdown Monster 會直接幫我將文章轉成 HTML 內容寫入到剪貼薄中,接著在點部落的編輯器上切換原始碼,再把 HTML 內容貼上去,但是最近點部落的編輯器改版了,沒辦法直接貼上 HTML 原始碼,可是 Markdown Monster 複製的 HTML 內容居然貼得上去,這其中必有緣故。

...繼續閱讀 »

[小菜一碟] Windows Forms 的 DataGridViewComboBoxColumn 選項變更後立即更新到 DataSource

Windows Forms 的 DataGridView 開啟編輯資料之後,我們就可以在畫面上直接對資料進行修改,預設的統一操作行為是修改完資料之後,按下 Enter 鍵或是離開該儲存格,資料就會更新到綁定的 DataSource 上,就像下面這樣:

但是呢,使用者會希望能在修改之後立即更新到 DataSource,不要再多敲 Enter 鍵或離開儲存格的動作,尤其是 ComboBox,我們來看一下怎麼弄?

...繼續閱讀 »

[廚餘回收] 在 Windows Forms 做控制項的資料綁定後,發生「跨執行緒作業無效」的錯誤。

如果我們的 Data Source 是非同步更新的話,那麼我們就很容易收到下面的錯誤訊息。

跨執行緒作業無效: 存取控制項 'xxx' 時所使用的執行緒與建立控制項的執行緒不同。(Cross-thread operation not valid: Control 'xxx' accessed from a thread other than the thread it was created on.)

一般遇到這個情況,我們通常就是判斷 Control.InvokeRequired 屬性,然後改用 Control.Invoke()Control.BeginInvoke() 方法來修改控制項的屬性,如果是在有資料綁定的情況呢?怎麼解決這個跨執行緒的問題?

...繼續閱讀 »

[料理佳餚] 用 .NET Core Worker Service 在 Linux 及 Windows 上建置背景服務

以往用 .NET Framework 開發的時候,都是用 TopShelf 來建置 Windows 服務,現在 .NET Core 弄了一個叫 .NET Generic Host 的東西,我們可以直接將服務透過它來 Host 成背景服務,而且它是跨平台的,不只可以部署在 Windows 上,Linux 上也行得通,ASP.NET Core 應用程式就是用它來讓服務可以長時間執行。

...繼續閱讀 »

[料理佳餚] 在 Windows Server 2016/2019 建立 RAM Disk

在雲端上的虛擬機器,其磁碟機會是個瓶頸,以 GCE 為例,如果應用程式需要讀寫大量的小檔,就會發現磁碟機的 IOPS 不太夠用,這時候就要增加磁碟機空間或是增加 CPU 的核心數,磁碟機的 IOPS 才會隨之增加,但是為此所增加的磁碟機空間或是 CPU 的核心數,我們根本就用不了那麼多,所以我就想說建立 RAM Disk,檔案從裡面存取,在離峰時間才執行指令將檔案備份到永久磁碟去,Windows Server 上有方法可以建立 RAM Disk,我們來看看怎麼做?

...繼續閱讀 »