非UI现场数据计算更新UI线程 搜索委托操作UI跟多少没关系,只要是非UI线程对UI操作都会报错解决办法就是将操作委托给UI线程去执行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 额,基本不是这个问题,虽然你非线程操作UI是有安全原因但是你目前的报错信息OutOfMemoryException,内存溢出错,估计还是无限循环了额ls红孩儿咋到处有你,但是每次回答滴时候,能不能好好看题目在回答啊 MyClass.ThreadUI.SetTxt(TXTValue1, "-" + num.ToString(), this); 这是交给了一个新的线程处理UI问题?线程一直在开启,没有终止,导致内存不足? 非UI线程是一直执行如果thread2与UI线程这样操作基本上没异常,多个thread对一个UI,异常出现的还是多的,有时候系统莫名其妙闪退 UI线程(主线程) invoke 你的所有非UI线呈(写一个轮训),这样应该不会错了 附上UI线程 /// <summary> /// 委托更改文本 /// </summary> /// <param name="objCtrl"></param> /// <param name="text"></param> /// <param name="winf"></param> delegate void SetTextUI(System.Windows.Forms.Control objCtrl, string text, Form winf);考虑 非UI线程是一直执行如果thread2与UI线程这样操作基本上没异常,多个thread对一个UI,异常出现的还是多的,有时候系统莫名其妙闪退除了主线程(也有人叫 UI 线程)之外,任何线程都不可以访问 UI 上面的东西,否则会有一定概率出错。这是 windows 的 消息泵机制决定的。如果后台线程希望更新主线程,可以使用 control.Invoke or control.BeginInvoke 来实现。 UI线程也做了处理,代码如下 public static void SetText<TObject>(TObject objCtrl, string text, Form winf) where TObject : System.Windows.Forms.Control { if (objCtrl.InvokeRequired) { SetTextUI d = new SetTextUI(SetText); if (winf.IsDisposed) { return; } winf.Invoke(d, new object[] { objCtrl, text, winf }); } else { objCtrl.Text = text; } } 你的代码粗略看上去没有问题,但是感觉非常复杂,如果能够简化就好。MSDN 上面有个例子,看能不能对你有帮助:How to: Make Thread-Safe Calls to Windows Forms Controls c# 怎么读word word含有图片、表格等 streamreader、streamwriter读写文件的问题。 关于一个透明的解决方案 |=这是什么运算符?????? 如何调用自己建立的类,在不同的文件夹中的 有关while循环的问题 VCE是什么? 关于ACCESS的小问题,看上去字多,实际简单!马上结帖! 用C#的Remoting实现语音通讯 Xml数据库的结构问题 winform 导入wps excel 报错 如何获取一个url地址后面的文件名 ?
这是交给了一个新的线程处理UI问题?
线程一直在开启,没有终止,导致内存不足?
如果thread2与UI线程这样操作基本上没异常,多个thread对一个UI,异常出现的还是多的,有时候系统莫名其妙闪退
/// 委托更改文本
/// </summary>
/// <param name="objCtrl"></param>
/// <param name="text"></param>
/// <param name="winf"></param>
delegate void SetTextUI(System.Windows.Forms.Control objCtrl, string text, Form winf);考虑
如果thread2与UI线程这样操作基本上没异常,多个thread对一个UI,异常出现的还是多的,有时候系统莫名其妙闪退除了主线程(也有人叫 UI 线程)之外,任何线程都不可以访问 UI 上面的东西,否则会有一定概率出错。这是 windows 的 消息泵机制决定的。如果后台线程希望更新主线程,可以使用 control.Invoke or control.BeginInvoke 来实现。
UI线程也做了处理,代码如下 public static void SetText<TObject>(TObject objCtrl, string text, Form winf) where TObject : System.Windows.Forms.Control
{
if (objCtrl.InvokeRequired)
{
SetTextUI d = new SetTextUI(SetText);
if (winf.IsDisposed)
{
return;
}
winf.Invoke(d, new object[] { objCtrl, text, winf });
}
else
{
objCtrl.Text = text;
}
}
你的代码粗略看上去没有问题,但是感觉非常复杂,如果能够简化就好。
MSDN 上面有个例子,看能不能对你有帮助:How to: Make Thread-Safe Calls to Windows Forms Controls