我想从控制台应用中正确关闭winform应用程序。所以我尝试这样的事情:
var cancelSource = new CancellationTokenSource();
if (runUI)
{
var UI = new FormUI(somedata);
//cancel request if form is closing.
UI.FormClosing += (sender, args) =>
{
cancelSource.Cancel();
};
Task.Factory.StartNew(() =>
{
//run form from console app.
Application.Run(UI);
}, cancelSource.Token);
}
但是当我点击表单上的X按钮时,我得到了空引用异常,我不知道它被抛出的位置。
那么如何正确地做到这一点?
更新: 更清楚。我的控制台应用程序只读取用户命令,然后执行一些处理数据方法。如果用户编写命令来显示UI我想打开新表单并通过构造函数传递数据。这些数据会发生变化,因此我每5秒刷新一次此表单视图。主要目的是使数据处理独立于表单。但是当我关闭该表单时,抛出了null引用异常。使用取消只是在表单关闭时尝试终止此任务。
接下来回答我做这样的事情:
var data = new Data(...)
var thread = new Thread(() =>
{
data.Execute();
});
thread.Start();
if (runUI)
{
var UI = new FormUI(data);
Application.Run(UI);
}
但是当我关闭表单时,它仍然会给我错误。
答案 0 :(得分:0)
我不确定您正在尝试使用取消逻辑等等。但如果您使用主线程上的表单构建您的应用程序,那么它非常简单。
尽管表单已关闭,_dataThread仍会继续运行。
_dataThread = new Thread(MyDataProcessingLoop)
_dataThread.Start()
if(runUI){
_uiForm = new UIForm();
Application.Run(_uiForm);
}else{
Application.Run(); //Keep the application running
}