Я новичок в C #, в основном я разработал приложение .net с VB.
Я разработал приложение .net WPF для подключения службы Microsoft Cognitive для получения описания изображения и сохранения на сервере SQL.
потому что я буду запускать его как запланированное задание, поэтому я хочу, чтобы оно автоматически закрывалось после завершения процесса.
приложение может работать правильно, чтобы получить описание изображения и обновить таблицу.
но он немедленно закроется без запуска процесса, если я добавлю функцию закрытия приложения.
Могу ли я узнать, как приложение может дождаться завершения процесса, прежде чем закрыть приложение?
Заранее спасибо.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using Microsoft.ProjectOxford.Vision;
using Microsoft.ProjectOxford.Vision.Contract;
using System.Diagnostics;
namespace TagPhotoScheduler
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Boolean Finished = false;
public MainWindow()
{
InitializeComponent();
ReadFile();
CloseApp();
}
public void CloseApp()
{
//close application after run
if (Finished == true)
{
Application.Current.Shutdown();
//this.Close();
}
}
public void ReadFile()
{
DataClassesTagPhotoDataContext dc = new DataClassesTagPhotoDataContext();
var query = from qPhoto in dc.db_PhotoLibrary_Photos
where qPhoto.ML_Processed == false
select qPhoto;
foreach (var q in query)
{
string pFileName = string.Empty;
string photoURL = string.Empty;
pFileName = q.PhotoID + "." + q.FileType;
_status.Text += pFileName + " | ";
photoURL = "https://example.com/storage/";
if (q.ProjectID == null || q.ProjectID == 0)
{
GetTag(q.PhotoID, photoURL + pFileName);
_status.Text += photoURL + pFileName + " \n";
}
else //had projectid
{
photoURL += q.ProjectID + "/";
if (q.AlbumID == null || q.AlbumID == 0)
{
//photoURL += "/" + q.AlbumID + "/";
GetTag(q.PhotoID, photoURL + pFileName);
_status.Text += photoURL + pFileName + " \n";
}
else //albumid
{
photoURL += q.AlbumID + "/";
GetTag(q.PhotoID, photoURL + pFileName);
_status.Text += photoURL + pFileName + " \n";
}
}
}
//Finished = true;
_status.Text += "\n\nFinished";
}
public async void GetTag(int PhotoID, string URL)
{
VisionServiceClient VisionServiceClient = new VisionServiceClient("xxxxxxxxxxxxxxxxxxxx", "https://eastasia.api.cognitive.microsoft.com/vision/v1.0");
DataClassesTagPhotoDataContext dc = new DataClassesTagPhotoDataContext();
try
{
AnalysisResult analysisResult = await VisionServiceClient.DescribeAsync(URL, 3);
if (analysisResult.Description != null)
{
foreach (var tag in analysisResult.Description.Tags)
{
tags += tag + ", ";
string QueryAnalysis = string.Empty;
db_PhotoLibrary_Photo_Tag newQ = new db_PhotoLibrary_Photo_Tag();
newQ.TagOn = DateTime.Now;
newQ.TagBy = 0;
newQ.PhotoID = PhotoID;
newQ.ML_Tag = true;
newQ.TagType = 0;
newQ.TagName = tag;
dc.db_PhotoLibrary_Photo_Tags.InsertOnSubmit(newQ);
dc.SubmitChanges();
db_PhotoLibrary_Photo result = (from p in dc.db_PhotoLibrary_Photos
where p.PhotoID == PhotoID
select p).SingleOrDefault();
result.ML_Processed = true;
dc.SubmitChanges();
}
_status.Text = tags;
}
}
catch { }
}
}
}
Наконец, я перехожу на консольное приложение, и оно может выполнять мою работу.