国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

c#多線程訪問界面

2019-11-17 04:02:37
字體:
來源:轉載
供稿:網友
C#2005后不再支持多線程直接訪問界面的控件(界面創建線程與訪問線程不是同一個線程),不過可以使用delegate來解決:

1. 聲明一個delegate和定義一個delegate的實現函數
view plaincopy to clipboardPRint?
delegate void ShowProgressDelegate(int newPos);   
private void ShowProgress(int newPos)   
{   
// 判斷是否在線程中訪問   
if (!_progressBar.InvokeRequired)   
{   
// 不是的話直接操作控件   
_progressBar.Value = newPos;   
}   
else  
{   
// 是的話啟用delegate訪問   
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);   
// 如使用Invoke會等到函數調用結束,而BeginInvoke不會等待直接往后走   
this.BeginInvoke(showProgress, new object[] { newPos });   
}   
}  
delegate void ShowProgressDelegate(int newPos);
private void ShowProgress(int newPos)
{
// 判斷是否在線程中訪問
if (!_progressBar.InvokeRequired)
{
// 不是的話直接操作控件
_progressBar.Value = newPos;
}
else
{
// 是的話啟用delegate訪問
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// 如使用Invoke會等到函數調用結束,而BeginInvoke不會等待直接往后走
this.BeginInvoke(showProgress, new object[] { newPos });
}
}

2. 定義線程函數(在另一個線程中可以對界面控件進讀操作)
view plaincopy to clipboardprint?
private void ProgressStart()   
{   
while (true)   
{   
int newPos = _progressBar.Value + 10;   
if (newPos > _progressBar.Maximum)   
{   
newPos = _progressBar.Minimum;   
}   
Trace.WriteLine(string.Format("Pos: {0}", newPos));   
// 這里直接調用方法,由其內部自動判斷是否啟用delegate   
ShowProgress(newPos);   
Thread.Sleep(100);   
}   
}  
private void ProgressStart()
{
while (true)
{
int newPos = _progressBar.Value + 10;
if (newPos > _progressBar.Maximum)
{
newPos = _progressBar.Minimum;
}
Trace.WriteLine(string.Format("Pos: {0}", newPos));
// 這里直接調用方法,由其內部自動判斷是否啟用delegate
ShowProgress(newPos);
Thread.Sleep(100);
}
}

3. 線程的啟動和終止
view plaincopy to clipboardprint?
private Thread _progressThread;   
_progressThread = new Thread(new ThreadStart(ProgressStart));   
// 可選,功用:即使該線程不結束,進程也可以結束   
_progressThread.IsBackground = true;   
_progressThread.Start();   
_progressThread.Abort();   
// 可選,功用:等到線程結束才繼續   
_progressThread.Join();   
_progressThread = null;  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松滋市| 西乌珠穆沁旗| 永靖县| 阳春市| 平凉市| 田阳县| 天津市| 阆中市| 尉犁县| 杂多县| 嵊泗县| 长垣县| 芦溪县| 文成县| 乡宁县| 陇南市| 庄浪县| 宜黄县| 伊通| 汝阳县| 搜索| 泰安市| 天水市| 治多县| 澳门| 河北区| 罗田县| 共和县| 吉木萨尔县| 青冈县| 社旗县| 乡宁县| 比如县| 遵义市| 应城市| 肃宁县| 荔浦县| 宁陕县| 于田县| 杭锦旗| 大庆市|