8 个解决方案
#1
不是this.Close();
??
??
#2
应该写在哪里?我试了直接写在loaed里代码执行时界面不显示,然后执行完就执行close关闭了。。
#3
既然你用的异步,不要在执行了异步操作之后直接执行close
那样异步操作还没执行完,窗体就关闭了
你需要在异步方法的回调函数里写close(异步方法执行完的时候)
那样异步操作还没执行完,窗体就关闭了
你需要在异步方法的回调函数里写close(异步方法执行完的时候)
#4
用了回调了,会在耗时操作后结束程序,但是窗口依然没显示,是不是我写的位置不对,不应该写在loaded事件里,但是想让界面显示后开始执行耗时操作想不出写在别的什么地方啊?
#5
给自己顶个!
#6
你把执行耗时操作的代码写哪里了?
你确定它是异步执行的,而不是用主线程去执行的?
你确定它是异步执行的,而不是用主线程去执行的?
#7
还有,实在不行去掉你耗时的代码,也去掉close,看到底它能不能显示出来
是一开始就显示不出来,还是因为加了你的代码才显示不出来
是一开始就显示不出来,还是因为加了你的代码才显示不出来
#8
太感谢了,谢谢你给我理清了思路,已解决!附上自己的丑丑的代码,哪里写错的话希望还望斑竹大大指教哈
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
应该写在哪里?我试了直接写在loaed里代码执行时界面不显示,然后执行完就执行close关闭了。。
#3
既然你用的异步,不要在执行了异步操作之后直接执行close
那样异步操作还没执行完,窗体就关闭了
你需要在异步方法的回调函数里写close(异步方法执行完的时候)
那样异步操作还没执行完,窗体就关闭了
你需要在异步方法的回调函数里写close(异步方法执行完的时候)
#4
用了回调了,会在耗时操作后结束程序,但是窗口依然没显示,是不是我写的位置不对,不应该写在loaded事件里,但是想让界面显示后开始执行耗时操作想不出写在别的什么地方啊?
#5
给自己顶个!
#6
你把执行耗时操作的代码写哪里了?
你确定它是异步执行的,而不是用主线程去执行的?
你确定它是异步执行的,而不是用主线程去执行的?
#7
还有,实在不行去掉你耗时的代码,也去掉close,看到底它能不能显示出来
是一开始就显示不出来,还是因为加了你的代码才显示不出来
是一开始就显示不出来,还是因为加了你的代码才显示不出来
#8
太感谢了,谢谢你给我理清了思路,已解决!附上自己的丑丑的代码,哪里写错的话希望还望斑竹大大指教哈
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();
}