Theo Best Practices của họ:
Gtk # không phải là một bộ công cụ thread-safe, có nghĩa là chỉ có một thread tại một thời điểm có thể yên tâm gọi các phương pháp trên Gtk #. Chủ đề này thường là luồng thực thi vòng lặp chính (đó là khi điều khiển đã được chuyển một cách rõ ràng sang Gtk).
Khi nhà phát triển ứng dụng cần phải cập nhật một số phần tử của giao diện người dùng đồ họa, họ phải có khóa để cho phép họ phát hành Gtk # toolkit invocations hoặc họ có thể thực thi mã của họ trên cùng một luồng với một chuỗi thực thi vòng lặp chính.
Để gọi phương thức trên chuỗi vòng lặp chính GTK + và tránh bất kỳ vấn đề luồng nào với GTK, bạn có thể sử dụng phương thức Gtk.Application.Invoke() (nếu bạn đang nhắm mục tiêu Gtk # 1.0, bạn có thể sử dụng Gtk.ThreadNotify).
Ví dụ sau được cung cấp; bạn nên sử dụng Invoke
để thực thi bất kỳ mã Gtk nào trong vòng lặp chính:
public void ThreadedMethod()
{
Gtk.Application.Invoke(delegate {
do_stuff_in_main_thread();
});
}
Nguồn
2010-03-30 19:59:26
Đại biểu không hoạt động !? Bạn có sử dụng phương thức Control.BeginInvoke() để gọi các đại biểu không? – Cipi
Tôi đã không, bạn có thể xây dựng trên đó? – nubela
Hãy nhớ rằng anh ấy đang sử dụng GTK, không phải Windows Forms, vì vậy API khác nhau (xem bên dưới). –