Chuyển đến nội dung chính

Bài đăng

Sử dụng interface IDispose trong C#

Sử dụng hàm Dispose chủ yếu để giải phóng các tài nguyên không được kiểm soát. Ngoài ra, hàm này còn được dùng để xóa phần tử trong 1 tập hợp hoặc làm cờ để báo rằng hàm Dispose() đã được gọi. Gọi hàm Dispose Gọi hàm Dispose thủ công class Program { static void Main(string[] args) { var disp = new DisposableDemoClass(); disp.Dispose(); } } class DisposableDemoClass : IDisposable { public void Dispose() { Console.WriteLine("Dispose called!"); } } Sử dụng using class Program { static void Main(string[] args) { using (var disp = new DisposableDemoClass()) { } } } class DisposableDemoClass : IDisposable { public void Dispose() { Console.WriteLine("Dispose called!"); } } Hàm Dispose Ở hàm Dispose(), bạn gọi thêm phương thức GC.SuppressFinalize(this). SuppressFinalize chỉ nên được gọi bởi trong hàm Descontructor. Nó thông báo cho Bộ sưu tập rác (GC) rằng đối tượng this đã được dọn sạch hoàn toàn. public void Dispose() { // Dispose of u...

Khai thác dữ liệu web với AngleSharp trong .NET Core

Web scrapping là gì? Web scraping là một quá trình tự động thu thập thông tin từ website. Nói là cách đơn giản là lấy thông tin (html) từ 1 website cụ thể rồi trích xuất data cần thiết. Ứng dụng là việc khai thác dữ liệu là bạn có thể tùy biến để cập nhật tin tức, giá cả cổ phiếu, vàng, ... Hiện tại, có nhiều thư viện hỗ trợ như: AngleSharp và HtmlAgilityPack. Nhưng mình thấy HtmlAgilityPack chưa hỗ trợ .NET Core nên mình quyết định mài mò nghiên cứu AngleSharp. Cài đặt và sử dụng AngleSharp Tạo project Console Application mới. Sau đó cài đặt AngleSharp dotnet add package AngleSharp Khai báo namespace: using AngleSharp; using AngleSharp.Dom; using AngleSharp.Html.Dom; Để thực hiện việc lấy data, bạn không cần khai báo HttpModule. AngleSharp sẽ làm việc đó thay bạn Đoạn code dưới đây sẽ lấy data từ 1 trang web có địa chỉ url, ví dụ trang https://vnexpress.net var config = Configuration.Default.WithDefaultLoader(); var context = BrowsingContext.New(config); var docum...

Tìm hiểu về Cancellation trong C# và những điều bạn cần biết

Cancellation token là gì? Cơ chế Task trong C# là 1 tính năng mạnh mẽ trong lập trình Parallel và Concurrent. Vấn đề đặt ra nếu bạn thực hiện đa luồng, thì làm sao để hủy bỏ những những hàm bất đồng. Tại sao chúng ta cần kiểm soát Task? Một trong những lý do là yêu cầu về mặt logic hoặc thuật toán, bên cạnh đó là những luồng không thể kiểm soát được. Và khi hủy bỏ Task, bạn cần throw an exception thay vì trả về một kết quả null (hoặc rỗng). .NET cung cấp 2 class: CancellingTokenSource: là một đối tượng chịu trách nhiệm tạo Cancellation Token và gởi request đến tất cả các hàm chứa đối tượng đó. CancellationToken: là một cấu trúc được dùng để theo dõi trạng thái của Token hiện tại Ví dụ Dừng Task thủ công Phương thức CancellationTokenSource.Cancel() được dùng để hủy Task khi thỏa điều kiện logic Ví dụ dưới đây thực hiện việc tính tổng, khi thỏa điều kiện số ngẫu nhiên = 0 => dừng việc phát sinh số ngẫu ...

Ẩn phụ đề video vừa luyện nghe Tiếng Anh

Trong thời gian rảnh rỗi, mình làm 1 file html, và dùng canvas để che đi phụ đề. 1 là luyện nghe tiếng Anh, 2 là rảnh rỗi học tí về HTML5 và CSS Bạn có thể tham khảo đoạn code sau: <!DOCTYPE html> <html lang="en"> <head> <title>Title</title> <!-- Required meta tags --> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous" /> <style> #soblurme { position: absolute; border: 1px solid white; pointer-events: none; width: 640px; height: 88px; left: 15px; top: 385px; backdrop-filter: blu...

Hooks và Dependency Injection trong Specflow

Mình là dev bên .NET, thỉnh thoảng thấy cái gì hay hay trên mạng thì mình học ké. Mình thấy Specflow khá thú vị, nhưng mình thắc mắc là có thể sử dụng DI trong Selenium. Và hôm nay, mình vô tình thấy bài hướng dẫn về Hooks trên trang automatetheplanet . Đọc sơ về Hooks, mình nghĩ ngay tới việc sử dụng 1 thư viện khá nổi tiếng là Autofac. Nhưng do có sự khác biệt về web application và automation testing nên mình nghĩ BoDi được tích hợp trong Specflow sẽ thích hợp hơn. Vậy Hooks là gì? Việc sử dụng BoDi có phức tạp không? Hooks là gì? Hooks (event binding) có thể được sử dụng để thực hiện logic tự động hóa bổ sung trên các sự kiện cụ thể, ví dụ như trước khi thực hiện một scenario. Hooks được sử dụng global nhưng có thể bị hạn chế chỉ chạy cho các feature hoặc scenario với một tag cụ thể. Thứ tự thực hiện của hooks cho cùng một sự kiện là không xác định. Các sự kiện trong Hooks: BeforeTestRun BeforeFeature BeforeScenario BeforeScenarioBlock BeforeStep AfterStep AfterScenarioBlock AfterSc...

Hướng dẫn sử dụng Pivot Table

Giới thiệu Pivot Table là một trong công cụ thống kê dữ liệu mạnh mẽ trọng Excel, đặc biệt hiệu quả khi bạn cần thống kê nhanh để báo cáo trên các khối dữ liệu lớn. PivotTable cho phép bạn phân tích theo một hay nhiều yêu cầu cụ thể nào đó như trích xuất dữ liệu, tạo báo cáo, thống kê… Để hiểu đơn giản, bạn hình dung bạn có timesheet từ rất nhiều user, bạn cần tổng hợp để tính Invoice report, lúc này bạn sẽ nghĩ tới Pivot Table thay vì thao tác trên data chính thức. Để hiểu rõ hơn về Pivot Table, bạn tìm hiểu thông qua các ví dụ sau. Chuẩn bị data Trong bài này, mình xài 2 table dữ liệu: https://www.contextures.com/xlSampleData01.html https://www.contextures.com/xlSampleData01.html#data Cách thêm Pivot Table Dưới đây là các bước để thêm 1 pivot table: Click vào 1 ô bất kỳ trong bảng dữ liệu (dataset) hoặc bạn chọn dataset cần xử lý Click Insert –> Tables –> Pivot Table Bên dưới Chọn dữ liệu bạn muốn phân tích, chọn Chọn một bảng và nơi chứa Pivot table Click Ok để tạo Pivot Table...