110,546
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 子窗口
/// </summary>
public partial class FormCefSharp : Form
{
public event EventHandler UserNameChange;
private string UserName
{
get
{
return _userName;
}
set
{
_userName = value;
UserNameChange?.Invoke(value, null); //事件,传回父窗口
}
}
}
/// <summary>
/// 父窗口
/// </summary>
public partial class FormMain : Form
{
FormCefSharp formCefSharp;
public FormMain()
{
InitializeComponent();
FormCefSharpInit();
}
private void FormCefSharpInit()
{
formCefSharp = FormCefSharp.GetIntance;
formCefSharp.UserNameChange += new EventHandler(CefSharpUserNameChange);
}
public void CefSharpUserNameChange(object sender, EventArgs e)
{
//问题在这里,这里我使用了Invoke,来解决线程间操作无效的问题
//有没有办法不用Invoke,直接btn_Login.Text = sender.ToString();
//如果真的什么处理,这一步可以放到formCefSharp中么?
if (InvokeRequired)
{
Invoke(new EventHandler(CefSharpUserNameChange), sender, e);
return;
}
btn_Login.Text = sender.ToString();
}
}
public void CefSharpUserNameChange(object sender, EventArgs e)
{
btn_Login.Text = sender.ToString();
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var f = new Form2();
f.Show();
f.OnAddEvent += new EventHandler<AddEventData>(f_OnAddEvent);
}
void f_OnAddEvent(object sender, AddEventData e)
{
textBox1.Text = e.Text;
}
}
public class AddEventData : EventArgs
{
public string Text;
}
public partial class Form2 : Form
{
public event EventHandler<AddEventData> OnAddEvent;
public Form2()
{
InitializeComponent();
textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
}
void textBox1_TextChanged(object sender, EventArgs e)
{
if (OnAddEvent != null)
{
OnAddEvent(this, new AddEventData() { Text = textBox1.Text });
}
}
}
不注释也能看的懂吧?