WPF执行完一段代码后自动关闭

时间:2022-09-02 22:39:32
想要在界面Load完以后开始执行一段耗时的代码(异步),执行完以后关闭界面窗口,新手第一次发帖请问大家这个应该怎么做啊?

8 个解决方案

#1


不是this.Close();
??

#2


引用 1 楼 touree 的回复:
不是this.Close();
??


应该写在哪里?我试了直接写在loaed里代码执行时界面不显示,然后执行完就执行close关闭了。。

#3


既然你用的异步,不要在执行了异步操作之后直接执行close
那样异步操作还没执行完,窗体就关闭了

你需要在异步方法的回调函数里写close(异步方法执行完的时候)

#4


引用 3 楼 Z65443344 的回复:
既然你用的异步,不要在执行了异步操作之后直接执行close
那样异步操作还没执行完,窗体就关闭了

你需要在异步方法的回调函数里写close(异步方法执行完的时候)


用了回调了,会在耗时操作后结束程序,但是窗口依然没显示,是不是我写的位置不对,不应该写在loaded事件里,但是想让界面显示后开始执行耗时操作想不出写在别的什么地方啊?

#5


WPF执行完一段代码后自动关闭给自己顶个!

#6


你把执行耗时操作的代码写哪里了?
你确定它是异步执行的,而不是用主线程去执行的?

#7


还有,实在不行去掉你耗时的代码,也去掉close,看到底它能不能显示出来

是一开始就显示不出来,还是因为加了你的代码才显示不出来

#8


引用 7 楼 Z65443344 的回复:
还有,实在不行去掉你耗时的代码,也去掉close,看到底它能不能显示出来

是一开始就显示不出来,还是因为加了你的代码才显示不出来


太感谢了,谢谢你给我理清了思路,已解决!附上自己的丑丑的代码,哪里写错的话希望还望斑竹大大指教哈 WPF执行完一段代码后自动关闭


public delegate void WorkDoneDelegate();
public delegate void CloseFormDelegate();

public void CallBackMethod(IAsyncResult result)
{
WorkDoneDelegate wdele=(WorkDoneDelegate)result.AsyncState;
wdele.EndInvoke(result);
CloseFormDelegate cfd=new CloseFormDelegate(CloseForm);
Dispatcher.Invoke(cfd);
}

private void Window_Loaded(object sender,RoutedEventArgs e)
{
//DoCopy.TestCopy完成耗时操作
DoCopy dc=new DoCopy();
WorkDoneDelegate wdele=new WorkDoneDelegate(dc.TestCopy);
IAsyncResult ar=wdele.BeginInvoke(new AsyncCallback(CallBackMethod),wdele);
}

public void CloseForm()
{
this.Close();
}

#1


不是this.Close();
??

#2


引用 1 楼 touree 的回复:
不是this.Close();
??


应该写在哪里?我试了直接写在loaed里代码执行时界面不显示,然后执行完就执行close关闭了。。

#3


既然你用的异步,不要在执行了异步操作之后直接执行close
那样异步操作还没执行完,窗体就关闭了

你需要在异步方法的回调函数里写close(异步方法执行完的时候)

#4


引用 3 楼 Z65443344 的回复:
既然你用的异步,不要在执行了异步操作之后直接执行close
那样异步操作还没执行完,窗体就关闭了

你需要在异步方法的回调函数里写close(异步方法执行完的时候)


用了回调了,会在耗时操作后结束程序,但是窗口依然没显示,是不是我写的位置不对,不应该写在loaded事件里,但是想让界面显示后开始执行耗时操作想不出写在别的什么地方啊?

#5


WPF执行完一段代码后自动关闭给自己顶个!

#6


你把执行耗时操作的代码写哪里了?
你确定它是异步执行的,而不是用主线程去执行的?

#7


还有,实在不行去掉你耗时的代码,也去掉close,看到底它能不能显示出来

是一开始就显示不出来,还是因为加了你的代码才显示不出来

#8


引用 7 楼 Z65443344 的回复:
还有,实在不行去掉你耗时的代码,也去掉close,看到底它能不能显示出来

是一开始就显示不出来,还是因为加了你的代码才显示不出来


太感谢了,谢谢你给我理清了思路,已解决!附上自己的丑丑的代码,哪里写错的话希望还望斑竹大大指教哈 WPF执行完一段代码后自动关闭


public delegate void WorkDoneDelegate();
public delegate void CloseFormDelegate();

public void CallBackMethod(IAsyncResult result)
{
WorkDoneDelegate wdele=(WorkDoneDelegate)result.AsyncState;
wdele.EndInvoke(result);
CloseFormDelegate cfd=new CloseFormDelegate(CloseForm);
Dispatcher.Invoke(cfd);
}

private void Window_Loaded(object sender,RoutedEventArgs e)
{
//DoCopy.TestCopy完成耗时操作
DoCopy dc=new DoCopy();
WorkDoneDelegate wdele=new WorkDoneDelegate(dc.TestCopy);
IAsyncResult ar=wdele.BeginInvoke(new AsyncCallback(CallBackMethod),wdele);
}

public void CloseForm()
{
this.Close();
}