多執行緒,乙個古老的話題,今天我來聊下最基本的執行緒,ui執行緒和後台執行緒。
在後台執行緒中直接操作ui控制項會出現異常(執行緒間操作無效:從不是建立控制項「xx」的執行緒訪問它)。怎麼解決這個問題那?關鍵點在**和invokerequired屬性,winform的ui(視窗)**如下:
using
system;
using
system.collections.generic;
using
system.componentmodel;
using
system.data;
using
system.drawing;
using
system.text;
using
system.windows.forms;
using
landpylibrary;
using
landpycommon;
namespace
landpywindowsform
private
delegate
void
controldelegate(
string
time);
private
workthread wtobj;
controldelegate cdobj;
private
void
settime(
string
time)
public
void
showtime(
string
time)
else
}private
void
btnstart_click(
object
sender, eventargs e)
private
void
btnend_click(
object
sender, eventargs e)
}private
void
mainform_formclosing(
object
sender, formclosingeventargs e)}}
}為了能在後台執行緒中操作ui執行緒,我們的mainform繼承了公共介面iformworkthread,介面定義如下:
using system;
using system.collections.generic;
using system.text;
namespace landpycommon
}該介面放在乙個獨立的dll中,ui執行緒和後台執行緒也均處於不同的程式集中,它們均引用了該介面的dll。
後台執行緒類如下:
using
system;
using
system.collections.generic;
using
system.text;
using
system.threading;
using
landpycommon;
namespace
landpylibrary
public
void
deal()
}public
void
startshowtime()
public
void
endshowtime()}}
其實報異常是因為多執行緒操作ui控制項是非安全的,ms提供了解決方案,關鍵**如下:
public mainform()
private delegate void controldelegate(string time);
controldelegate cdobj;
private void settime(string time)
public void showtime(string time)
else
}通過**和invokerequired屬性解決了這個問題。
WIN FORM 多執行緒更新UI 介面控制項
方法1,更新單個控制項 public delegate void controltextmethod control control,string text private void setcontroltext control control,string text else 需要更新控制項的te...
Winform 執行緒修改UI介面元素的值
之前在做winform應用的時候,使用多執行緒控制介面上控制項資訊,時常碰到invalidoperationexception這個異常!這個異常的出現多數情況是由於worker執行緒 子執行緒 修改主線程式控制件 或物件 的屬性而導致的非法操作。這是因為.net 2.0以後加強了安全機制,不允許在w...
C 後台執行緒操作,不影響UI
方法一 public string backgroundactions string uriarg private void button1 click object sender,eventargs e start backgroundworker元件使用說明 一 概述 backgroundwor...