C# WinForm:
程序里另开的一个线程去修改主窗体上的控件的属性或使用他的方法 在主窗体的类下写个委托 再指定其调用方法 然后在线程里用这个方法就行了;
我的问题是:另开的线程要去修改主窗体上的控件(注:这个不是.net自带的那些常用控件,而是第三方的控件,是个dll,但是我有dll的源码)
请问如何让这个线程去修改窗体上的这个自定义的控件。谢谢,请详加说明。
程序里另开的一个线程去修改主窗体上的控件的属性或使用他的方法 在主窗体的类下写个委托 再指定其调用方法 然后在线程里用这个方法就行了;
我的问题是:另开的线程要去修改主窗体上的控件(注:这个不是.net自带的那些常用控件,而是第三方的控件,是个dll,但是我有dll的源码)
请问如何让这个线程去修改窗体上的这个自定义的控件。谢谢,请详加说明。
{
if (this.textBox1.InvokeRequired)
{
setTextCallBack b = new setTextCallBack(setText);
this.Invoke(b, new object[] { text });
}
else
{
this.textBox1.Text = text;
}
}线程如果在主窗体里,直接写 setText(....)
因为多个线程与窗体控件交互,有冲突,所以要这样写 ,关键点
InvokeRequired
setTextCallBack b = new setTextCallBack(setText);
this.Invoke(b, new object[] { text });
我说下我的具体情况吧,是这样子的:
我在联系System.Runtime.Remoting
在窗体上 我订阅了一个远程对象的事件,在这个事件体里我要去修改用户控件离的listview
事件一点问题都没有的 我作过试验 在这个事件体里修改窗体的东西一点问题都没 但就是用户控件不行呐
修改控件的属性和你的有无dll源码没关系的,直接可以像一般的控件那样使用
prform.BeginInvoke(mi); private void FormShow()
{
switch (re_message)
{prform......
}
}
//主窗体
public Form PRForm
{
get {
return prform;
}
set {
prform = value;
}
}
delegate void UpdateGridDelegate(UltraGrid grid, DataTable table);
void UpdateGrid(UltraGrid grid, DataTable table)
{
if (InvokeRequired)
{
Invoke(new UpdateGridDelegate(UpdateGrid), grid, table);
return;
}
grid.DataSource = null;
grid.DataSource = table;
} void FilterRun()\\ 线程执行的方法
{
DataSet ds = new DataSet();
for (int i = 0; i < excelDataSet.Tables.Count; i++)
{
DataTable dt = SqlBulkfilter(excelDataSet.Tables[i], "TempTable" + i);
UpdateGrid(uGrid[i], dt);
ds.Tables.Add(dt);
}
excelDataSet = ds;
Export(ds);
bFilterProgress = true;
}