Tôi muốn thực hiện một số thao tác trên chuỗi công nhân khi hiển thị thanh tiến trình cho người dùng. Tôi đã tạo một lớpCách sử dụng .NET Action để thực hiện một phương thức với số tham số không xác định?
public class ProgressBar
{
public void StartAsyncTask(Action action)
{
Task t = new Task(action);
t.start();
}
}
tôi phát hiện ra rằng tôi có thể gửi bất kỳ phương pháp để các StartAsyncTask
theo cách sau:
ProgressBar pb = new ProgressBar();
pb.StartAsyncTask(() => DoSomething(15, "something"));
public void DoSomething(int i, string s)
{
//do something
}
Trước hết, tôi dường như không thể hiểu những gì là và cách biểu thức lambda - () =>
- được dịch và cách đối tượng Action
truyền một đại biểu với số lượng tham số không xác định.
Tôi muốn sử dụng BackgroundWorker
với ProgressBar của mình nhưng trong trường hợp này tôi cần phải gọi hành động. Vì vậy, một cái gì đó như thế này:
void m_backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Action action = e.Argument as Action; //same action here passed through EventArgs
//but already in a worker thread so no need for the Task object
//and now i need to somehow invoke the action object but i don't know what the parameters are.
action.Invoke(?);
}
Làm thế nào là nó có thể ở ví dụ đầu tiên để thực hiện thao tác mà không biết các thông số trong StartAsyncTask(Action action)
phương pháp?
Tại sao tôi cần biết thông số khi gọi hành động trong trường hợp này?
Mọi thứ về cách/tại sao/khi nào sử dụng "Action
" là không rõ ràng đối với tôi ngay cả khi tôi đọc tài liệu MSDN và một số chủ đề khác tại đây. Mọi thông tin về điều này sẽ giúp tôi.
Bạn cần phải biết các thông số khi gọi nó .. khác (nếu nó có thể không để vượt qua các thông số) Hàm sẽ không có bất kỳ tham số nào được truyền vào nó .. do đó thực hiện lệnh 'parameter.Something' đầu tiên của bạn ném một' NullReferenceException'. –