Share c# backgroundworker

ngoclinh1690

New member
#C ##backgroundworker #MultithReading #asynchronousprogramming #WPF ## C #BackidentWorker

Lớp BackidentWorker trong C# là một lớp trợ giúp cho phép bạn chạy các tác vụ không đồng bộ.Điều này có nghĩa là nhiệm vụ sẽ được thực thi trong nền, mà không chặn luồng chính.Điều này có thể hữu ích cho các tác vụ mất nhiều thời gian để hoàn thành hoặc cho các tác vụ mà bạn không muốn chặn giao diện người dùng.

Để sử dụng lớp Backgroundworker, trước tiên bạn cần tạo một thể hiện mới của lớp.Bạn có thể làm điều này bằng cách gọi hàm tạo:

`` `C#
Công nhân Backgroundworker = new BackidentWorker ();
`` `

Khi bạn đã tạo một đối tượng BackgroundWorker, bạn có thể bắt đầu tác vụ bằng cách gọi phương thức RunWorkerAsync.Phương thức này lấy một đại biểu làm tham số.Đại biểu đại diện cho nhiệm vụ mà bạn muốn chạy không đồng bộ.

`` `C#
công nhân.runworkerasync (Dowork);
`` `

Đại biểu Dowork là một phương thức lấy hai tham số: đối tượng BackgroundWorker và một đối tượng đại diện cho tiến trình của tác vụ.Đối tượng tiến trình là một thể hiện của lớp Workworker.ProTHERChangedEventArgs.Lớp này có hai thuộc tính:

* ProgressPerCentage: Thuộc tính này đại diện cho tỷ lệ phần trăm của nhiệm vụ đã được hoàn thành.
* Userstate: Thuộc tính này có thể được sử dụng để chuyển dữ liệu cho đại biểu Dowork.

Đại biểu Dowork phải trả về một đối tượng nhiệm vụ.Đối tượng tác vụ đại diện cho kết quả của nhiệm vụ.Bạn có thể sử dụng đối tượng tác vụ để có được kết quả của nhiệm vụ hoặc chờ hoàn thành nhiệm vụ.

Để có được kết quả của nhiệm vụ, bạn có thể gọi thuộc tính Task.Result.Tài sản này sẽ trả về giá trị được Đại biểu Dowork trả lại.

Để chờ hoàn thành nhiệm vụ, bạn có thể gọi phương thức nhiệm vụ.wait.Phương pháp này sẽ chặn luồng hiện tại cho đến khi nhiệm vụ hoàn thành.

Dưới đây là một ví dụ về cách sử dụng lớp Backgoundworker để tải xuống tệp từ Internet:

`` `C#
private void downloadfile ()
{
// Tạo một đối tượng BackidentWorker mới.
Công nhân Backgroundworker = new BackidentWorker ();

// Đặt đại biểu Dowork.
người lao động.dowork += new Doworkeventhandler (Dowork);

// Đặt đại biểu ProgressChanged.
worker.ProTHERChanged += new ProgressEdeVenthandler (ProgressChanged);

// Đặt đại biểu RunworkerCompleted.
worker.runworkerCompleted += new RunWorkerCompletedEventhandler (RunworkerCompleted);

// Bắt đầu nhiệm vụ.
worker.runworkerAsync (downloadfileasync);
}

riêng void dowork (người gửi đối tượng, doworkeventargs e)
{
// Nhận URL tệp.
Chuỗi fileUrl = "https://www.example.com/file.txt";

// Tạo một đối tượng WebClient mới.
WebClient Client = new WebClient ();

// Tải tập tin.
client.doadFileAsync (fileUrl, "file.txt");
}

Private void ProgressChanged (người gửi đối tượng, ProgressChangedEventArss E)
{
// Nhận tỷ lệ phần trăm của nhiệm vụ đã được hoàn thành.
int argressPerCentage = (int) e.proTHERPercentage;

// Cập nhật thanh tiến trình.
ProgressBar.value = ProgressPerCentage;
}

RunworkerCompleted RunworkerCompleted (người gửi đối tượng, RunworkerCompletedEventArgs E)
{
// Nhận kết quả của nhiệm vụ.
Nhiệm vụ nhiệm vụ = E.Result;

// Nhận đường dẫn tệp.
Chuỗi filePath = Task.Result;

// Mở tập tin.
File.open (filePath, filemode.open);
}
`` `

## hashtags

* #Concurrency
* #asynchronousprogramming
* #WPF
* #MultithReading
* #.MẠNG LƯỚI
=======================================
#C# #backgroundworker #MultithReading #asynchronousprogramming #WPF ## C# Backgroundworker

The BackgroundWorker class in C# is a helper class that allows you to run tasks asynchronously. This means that the task will be executed in the background, without blocking the main thread. This can be useful for tasks that take a long time to complete, or for tasks that you don't want to block the user interface.

To use the BackgroundWorker class, you first need to create a new instance of the class. You can do this by calling the constructor:

```c#
BackgroundWorker worker = new BackgroundWorker();
```

Once you have created a BackgroundWorker object, you can start the task by calling the RunWorkerAsync method. This method takes a delegate as a parameter. The delegate represents the task that you want to run asynchronously.

```c#
worker.RunWorkerAsync(DoWork);
```

The DoWork delegate is a method that takes two parameters: a BackgroundWorker object and an object that represents the progress of the task. The progress object is an instance of the BackgroundWorker.ProgressChangedEventArgs class. This class has two properties:

* ProgressPercentage: This property represents the percentage of the task that has been completed.
* UserState: This property can be used to pass data to the DoWork delegate.

The DoWork delegate must return a Task object. The Task object represents the result of the task. You can use the Task object to get the result of the task, or to wait for the task to complete.

To get the result of the task, you can call the Task.Result property. This property will return the value that was returned by the DoWork delegate.

To wait for the task to complete, you can call the Task.Wait method. This method will block the current thread until the task has completed.

Here is an example of how to use the BackgroundWorker class to download a file from the internet:

```c#
private void DownloadFile()
{
// Create a new BackgroundWorker object.
BackgroundWorker worker = new BackgroundWorker();

// Set the DoWork delegate.
worker.DoWork += new DoWorkEventHandler(DoWork);

// Set the ProgressChanged delegate.
worker.ProgressChanged += new ProgressChangedEventHandler(ProgressChanged);

// Set the RunWorkerCompleted delegate.
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunWorkerCompleted);

// Start the task.
worker.RunWorkerAsync(DownloadFileAsync);
}

private void DoWork(object sender, DoWorkEventArgs e)
{
// Get the file URL.
string fileUrl = "https://www.example.com/file.txt";

// Create a new WebClient object.
WebClient client = new WebClient();

// Download the file.
client.DownloadFileAsync(fileUrl, "file.txt");
}

private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Get the percentage of the task that has been completed.
int progressPercentage = (int)e.ProgressPercentage;

// Update the progress bar.
ProgressBar.Value = progressPercentage;
}

private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Get the result of the task.
Task task = e.Result;

// Get the file path.
string filePath = task.Result;

// Open the file.
File.Open(filePath, FileMode.Open);
}
```

## Hashtags

* #Concurrency
* #asynchronousprogramming
* #WPF
* #MultithReading
* #.net
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top