【发布时间】:2015-05-02 02:34:16
【问题描述】:
我试图在 userControl 类之一中引发事件,并在 Main 类中触发它。我尝试了两种不同的方式来触发这个事件,其中一种有效,但我仍然想知道为什么其他方式不能工作,以及如何解决它。
我的 userContol 类:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(this))
{
return;
}
Class1 c = new Class1();
Thread accept = new Thread(
() =>
{
c.connection();
}
);
accept.Start();
}
}
还有 Class1:
public class Class1
{
public delegate void myhandler(object sender, EventArgs e);
public event myhandler test;
public Class1()
{
}
public void connection()
{
test(this, new EventArgs());
}
}
在 Main 中,我只是简单地添加到所指对象中,然后添加
xmlns:my="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"
然后我尝试在 main 中订阅此事件
public partial class SurfaceWindow1 : SurfaceWindow
{
/// <summary>
/// Default constructor.
/// </summary>
public SurfaceWindow1()
{
InitializeComponent();
Class1 c = new Class1();
c.test+=new Class1.myhandler(c_test);
// Add handlers for window availability events
AddWindowAvailabilityHandlers();
}
public void c_test(object sender, EventArgs e)
{
MessageBox.Show("fire");
}
}
如果我只在线程中引发这个事件,它工作正常,但如果我尝试让它在这个线程中引发,这个测试事件只返回 null,并显示:
Object reference not set to an instance of an object.
看起来我从来没有订阅过。那么如果我必须在线程中使用它,如何修复它。
【问题讨论】:
标签: c# wpf multithreading user-controls event-handling