熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

在C#中跨線程訪問Winform控件

2013-11-13 09:44:35  來源: .NET編程 

  在程序需要讀取CAD文件列表中的文件信息這是一個非常費時的操作所以希望通過多線程的方式來實現並且可以隨時中止由於初次使用多線程開始的時候采用獨立的線程類該類返回數據在ThreadJoin()方法等待線程結束後寫入數據到窗體控件中結果和單線程沒有什麼區別後來查看資料通過使用MethodInvoker解決了這一問題但是對於線程處理還是概念非常模糊大家誰有這方面的心得資料等共享學習學習
  public partial class frmMain : Form
{
private volatile bool _stoped = false;
private void btFilter_Click(object sender EventArgs e)
{
_stoped = false;
Thread t = new Thread(new ThreadStart(StartNewThread));
tStart();
}
private void btStop_Click(object sender EventArgs e)
{
_stoped = true;
}
private void GetFileSize()
{
btFilterEnabled = false;
using (AutoCADConnector CAD = new AutoCADConnector())
{
foreach (ListViewItem t in lvSourceItems)
{
if (!_stoped)
{
AutoCADAcadDocument doc = CADApplicationDocumentsOpen(tSubItems[]Text true );
double[] p = new double[] { };    //右上角坐標
                        double[] p = new double[] { };    //左下角坐標
                        double scale = ;                                  //縮放比例

  p = (double[])docGetVariable(EXTMAX);
p = (double[])docGetVariable(EXTMIN);
scale = ConvertToDouble(docGetVariable(DIMSCALE));
double w = MathCeiling((p[] p[]) / scale);
double h = MathCeiling((p[] p[]) / scale);
docClose(false );
tSubItems[]Text = stringFormat({}*{}  {} w h scale);
//lvSourceRefresh();
//ThreadSleep();
                        ApplicationDoEvents();
}
else
break;
}
}
btFilterEnabled = true;
}
private void StartNewThread()
{
MethodInvoker me = new MethodInvoker(thisGetFileSize);
thisBeginInvoke(me);
}
}


From:http://tw.wingwit.com/Article/program/net/201311/11468.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.