看來網上很多資料,好像都講的比較麻煩,有簡單一點的思路和例子嗎?
uj5u.com熱心網友回復:
// form1 有兩個控制元件
//1 textBox1文本控制元件
//2 backgroundWorker1 后臺控制元件 模擬執行緒
//3 button1 控制元件
public partial class Form1: Form {
private void button1_Click(object sender, EventArgs e) {
this.backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
SetMessage("aaaa");
}
public void SetMessage(string str) {
try {
textBox1.Invoke(new Action(() => {
textBox1.Text= str;
}));
}
catch {
}
}
}
uj5u.com熱心網友回復:
用Invoke,如下所示,richTextBox1是父視窗的控制元件,下面的函式可以在子執行緒里面使用(走if分支),也可以在父表單代碼里面使用(走else分支)void setInfoText(string text)
{
string str = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + text + "\n";
if (richTextBox1.InvokeRequired)
{
richTextBox1.Invoke(new MethodInvoker(delegate
{
richTextBox1.AppendText(str);//在這里操作父表單的控制元件
richTextBox1.HideSelection = false;
}));
}
else
{
richTextBox1.AppendText(str);
richTextBox1.HideSelection = false;
}
}
uj5u.com熱心網友回復:
將父表單的參考傳遞給子表單不就行了,比如建構式、屬性。也可以放到一個全域靜態變數里,不就到處可以訪問了。如果設定了Owner,也可以通過Owner反溯啊。當然也可以通過Windows API去FindWindow啊,方法很多了。uj5u.com熱心網友回復:
this.Owner.Invoke(new delegate() { this.Owner.xxx = xxx; });uj5u.com熱心網友回復:
委托加Invoke正解uj5u.com熱心網友回復:
凡是后臺子執行緒要使用UI執行緒成員的,都應該是Invoke UI執行緒去執行委托。uj5u.com熱心網友回復:
主表單呼叫子表單
public int setint=0;
FormSon set = new FormSon();
set.Owner = this;
set.ShowDialog();
子表單訪問父表單
MainForm f1 = (MainForm)Owner;
f1.setint=1;
uj5u.com熱心網友回復:
將父表單的參考傳遞給子表單不就行了,比如建構式、屬性。也可以放到一個全域靜態變數里,不就到處可以訪問了。如果設定了Owner,也可以通過Owner反溯啊。當然也可以通過Windows API去FindWindow啊,方法很多了。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/13006.html
標籤:C#
下一篇:C# BitArray的疑問
