• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Gọi Open/SaveFileDialoag trong Thread

Các mẹo vặt linh tinh không thuộc các nhóm trên

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Gọi Open/SaveFileDialoag trong Thread

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 20/12/2010 10:14 pm

Thủ thuật: ShowDialog Open/SaveFileDialog trong Thread
Tác giả: vo_minhdat2007
Mô tả: Chống lỗi khi gọi Dialog trong các Sub/Function gọi bằng Thread



Nếu các bạn gọi một thread, mà thread thực thi Sub/Function có gọi Open/SaveFileDialog thì khi Debug sẽ nhận lỗi như sau:

  1.     Private Sub Test()
  2.         Dim diagSave As New SaveFileDialog
  3.         diagSave.ShowDialog()
  4.     End Sub
  5.  
  6.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.         Dim T As New Threading.Thread(AddressOf Test)
  8.         T.Start()
  9.     End Sub


Lỗi khi debug:

Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process.


Còn khi chạy thì không có lỗi nhưng thread treo tại đó. Ta dễ dàng khắc phục bằng cách thêm 1 dòng sau để đặt chế độ STA cho thread:

  1.     Private Sub Test()
  2.         Dim diagSave As New SaveFileDialog
  3.         diagSave.ShowDialog()
  4.     End Sub
  5.  
  6.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  7.         Dim T As New Threading.Thread(AddressOf Test)
  8.         T.SetApartmentState(Threading.ApartmentState.STA)
  9.         T.Start()
  10.     End Sub



Quay về “[.NET] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách