final progressbar pb = new progressbar(shell, swt.none);
pb.setbounds(68, 153, 365, 17);
final int minnimum = pb.getminimum();
final int maximum = pb.getmaximum();
runnable r = new runnable() catch (exception e)
// pb.setselection(pb.getselection()+1); org.eclipse.swt.swtexception: invalid thread access
//讓ui執行緒更新滾動條的值
display.getdefault().asyncexec(new runnable()
});}}};
new thread(r).start();
//ps: 在設定滾動條的 progressbar 值時,為什麼不能直接使用 pb.setselection(pb.getselection() + 1) **來直接設定滾動條的值呢?這時因為
//滾動條物件是ui介面上的控制項,它是由ui執行緒建立的.若要訪問ui介面上的物件必須通過ui執行緒來訪問,就是說在非ui執行緒中呼叫ui物件是不允許的,這時出於執行緒安全的考慮.
//正因為如此,只能通過另一種方式來更新進度條的值,解決方案就是需要再開闢乙個執行緒,專門更新滾動條的值,這個執行緒交給ui執行緒來呼叫.
非UI執行緒訪問控制項
在vs2003之後的版本中,net加強了執行緒安全方面,非ui執行緒是不能直接訪問控制項的。這要求我們對控制項進行執行緒安全方式的呼叫。當然,我們也可以這樣做 checkforillegalcrossthreadcalls false 這個屬性包含在 system.windows.forms 中 這...
執行緒訪問ui,使用委託方式
control類提供了乙個invoke方法來給子執行緒訪問主線程的控制項,它的原型是醬紫的 object.control.invoke delegate method object.control.invoke delegate method,params object args method是已建...
WPF多執行緒訪問主線程中的ui控制項
wpf中的ui控制項只能由建立該ui的執行緒進行操作,但是經常有些複雜操作需要另起乙個執行緒來完成,而新的次執行緒計算的後又需要操作主線程的ui,可通過以下方法實現 第一步,定義委託 public delegate void delegate child 定義操作次執行緒的委託 public del...