C# winform多线程案例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform多线程案例相关的知识,希望对你有一定的参考价值。
最近在做基于C#的AutoCAD的二次开发,用dll封装了一个CAD命令程序类,需要从这个dll中取出一个值,但是如果这个值在dll里赋了初值的话,可以取到这个初值。但是如果用CAD命令为其赋值的话,在CAD里面可以看到这个值,winform窗体上取不到这个值,应该是多线程间通信的问题。(我要取的是代码中dis的值)
附上CAD命令
[CommandMethod("getDistance")]
public static void GetDistance()
PromptDistanceOptions prDistOptions = new PromptDistanceOptions("计算两点距离,请选择第一个点:");
PromptDoubleResult prDistRes;
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
prDistRes = ed.GetDistance(prDistOptions);
dis = prDistRes.Value.ToString();
ed.WriteMessage("dis=" + prDistRes.Value.ToString());
想问一下大家,有什么好的解决方案。
谢过!!!
阁下以为我的问题怎么解决才好?
追答上面只是说CS多线程是怎么写的, 总体看你的问题是想问数据在代码中已经被复制了,而UI却拿不到那个值,首先你算出来的值跟新到UI是需要用 UI主线程去INVOKE的,这样才能附上。这里可能有问题,另外检查是不是该变量在去给UI线程跟新前 被其他线程重新赋值了,我不知道你的具体问题是什么,我也做过几个CS的项目, 遇到过赋值的问题,具体还是得自己搞把,多线程不好DEBUG所以要有耐心 ,不知道你对多线程机制熟悉不,如果多去看看线程.INVOKE和控件.INVOKE等等,会对你理解代码有帮助的。
参考技术B 如果是线程之间的通信的问题的话,可以用个线程指定的委托Invoke估计行,你看看是不是其他原因 参考技术C 你那段代码能跑通么?我不确定。。。。
你可以在下面写 Form1 f=new form1(dis)
f。show();
定义的时候你定义 Form1(string s)
C#多线程等待回调
参考技术A 此处介绍一下 AutoResetEvent的方法下面贴一下微软自带的一个方法。
这样点击后就是
sleep十秒后
我们会注意到里面有个方法
此处这个方法可以替换带参数启动一个new Thread。 上面这个方法已经非常简练,建议这么使用,下面这个方法挺繁琐的。
下面的方法其实也是带参数新建线程的一个方法。
我们先新建一个类
那么将原先工程中的替换一下
以上是关于C# winform多线程案例的主要内容,如果未能解决你的问题,请参考以下文章
一个C# (队列多任务+多线程处理)对象的winform demo