c#

位置:IT落伍者 >> c# >> 浏览文章

在C#中跨线程访问Winform控件


发布日期:2023年04月10日
 
在C#中跨线程访问Winform控件

在程序需要读取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);

}

}

               

上一篇:VS2005中C#用代码打开软键盘

下一篇:对于C#比较运算符==的一点想法