我想改变进程线程事件火灾窗体控件属性中,我有以下的代码,但我收到此异常类:委托调用
调用线程不能访问此对象,因为不同的 线程拥有它。
代码:
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{}
}
}
请帮我在这,我想代表调用必须工作
我的项目是一个WPF C#项目。
答案是:
class nmap
{
private main _frm;
private Process myprocess;
public nmap()
{
}
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.StartInfo.CreateNoWindow = true;
myprocess.EnableRaisingEvents = true;
//myprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
myprocess.Exited += new EventHandler(myProcess_Exited);
myprocess.Start();
}
private void myProcess_Exited(object sender, System.EventArgs e)
{
try
{
String s;
s = "hello";
_frm.Dispatcher.Invoke(_frm.USD, new Object[] { s });
}
catch{}
}
}
public partial class main : Window
{
public delegate void UpdateStatusDelegate(string value);
public UpdateStatusDelegate USD;
public main()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
USD = new UpdateStatusDelegate(this.AddString);
}
private void AddString(String s)
{
label1.Content = s;
}
public void change()
{
label1.Content = "hello";
}
private void button1_Click(object sender, RoutedEventArgs e)
{
nmap nmap = new nmap(this);
nmap.test("hello");
}
}
嗨哈迪我在WPF工作没有InvokeRequired方法,但无论如何,我仍然有这个问题!请描述更多谢谢! –
我应该在nmap类或主窗口窗体中使用delegete调用? –
啊,你没有注意到你提到你在使用WPF。在WPF中,您应该能够使用Dispatcher.Invoke方法(几乎)执行相同的操作。 –