Monday, May 21, 2012

Delegate invoke

I want to change a Form control property from a process thread event fire in a class, I have the following code but I received this exception:




the calling thread cannot access this object because a different
thread owns it.




Code:



public partial class main : Window
{
public main()
{
InitializeComponent();
}

public void change()
{
label1.Content = "hello";
}

private void button1_Click(object sender, RoutedEventArgs e)
{
nmap nmap = new nmap(this);
nmap.test("hello");
}
}

class nmap
{
private main _frm;
private Process myprocess;

public nmap(main frm)
{
_frm = frm;
}

public void test(object obj)
{
string s1 = Convert.ToString(obj);
ProcessStartInfo startInfo = new ProcessStartInfo();
myprocess = new Process();
myprocess.StartInfo.FileName = "C:\\nmap\\nmap.exe";
myprocess.EnableRaisingEvents = true;
myprocess.Exited += new EventHandler(myProcess_Exited);

myprocess.Start();
}

private void myProcess_Exited(object sender, System.EventArgs e)
{
try
{
_frm.change();
}
catch{}
}
}


Please help me on this, I think delegate invoke must be work



My project is a WPF C# project.





No comments:

Post a Comment