2008-08-05 34 views

Trả lời

3

Nếu sửa đổi dữ liệu không quá tốn thời gian

Nếu công việc nặng nhọc trên dữ liệu, bạn có thể phải tạo một bản sao sâu của dữ liệu này để chuyển tới chuỗi nền, sẽ gửi dữ liệu đã xử lý trở lại luồng giao diện người dùng qua Gọi lại.

Bạn sẽ chỉ phải di chuyển mã thay đổi dữ liệu thành hàm đại biểu (vì thay đổi dữ liệu là những gì kích hoạt cập nhật kiểm soát). Ngoài ra, bạn không cần phải viết thêm bất cứ thứ gì.

3

Bạn sẽ có thể làm điều gì đó như:

if (control.InvokeRequired) 
{ 
    control.Invoke(delegateWithMyCode); 
} 
else 
{ 
    delegateWithMyCode(); 
} 

InvokeRequired là một tài sản trên Controls để xem nếu bạn đang ở trên thread đúng, sau đó Invoke sẽ gọi các đại biểu về các chủ đề chính xác.

UPDATE: Trên thực tế, tại công việc cuối cùng của tôi, chúng tôi đã làm một cái gì đó như thế này:

private void SomeEventHandler(Object someParam) 
{ 
    if (this.InvokeRequired) 
    { 
     this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam); 
    } 

    // Regular handling code 
} 

mà loại bỏ sự cần thiết của các khối khác và loại thắt chặt lên mã.

1

Vì tôi không có trường hợp thử nghiệm nên tôi không thể đảm bảo giải pháp này, nhưng dường như kịch bản tương tự như kịch bản được sử dụng để cập nhật thanh tiến trình trong các chủ đề khác nhau (sử dụng đại biểu) thích hợp ở đây.

public delegate void DataBindDelegate(); 
public DataBindDelegate BindData = new DataBindDelegate(DoDataBind); 

public void DoDataBind() 
{ 
    DataBind(); 
} 

Nếu liên kết dữ liệu cần phải được thực hiện bởi một chuỗi cụ thể, hãy để chuỗi đó hoạt động!

0

Nếu cuộc gọi chuỗi là "bất hợp pháp" (tức là cuộc gọi DataBind ảnh hưởng đến các điều khiển không được tạo trong chuỗi mà nó đang được gọi), thì bạn cần tạo đại biểu để ngay cả khi quyết định/chuẩn bị cho DataBind không được thực hiện trong luồng tạo điều khiển, bất kỳ sửa đổi kết quả nào của chúng (ví dụ: DataBind()) sẽ là.

Bạn sẽ gọi mã của tôi từ các sợi nhân như vậy:

this.BindData.Invoke(); 

này sau đó sẽ gây ra các chủ đề ban đầu để làm ràng buộc, trong đó (giả sử nó là sợi chỉ đã tạo ra các điều khiển) nên làm việc.

0

Trong WPF và Silverlight cơ sở hạ tầng ràng buộc sẽ quan tâm đến việc chuyển đổi sang chuỗi giao diện người dùng.

Các vấn đề liên quan