DTE is the top-level object in the Visual Studio automation object model.
HI =)
Ich habe zwei Befehle die nacheinander ausgeführt werden sollen. Die Betonung liegt auf nacheinander, denn die zweite Zeile wartet nicht auf die erste Zeile.
mein Code:
m_Solution.DTE.ExecuteCommand("ersteAufgabe");
m_Solution.DTE.ExecuteCommand("zweiteAufgabe");
"ersteAufgabe" benötigt xy Minuten Zeit (recht lange aber das ist in Ordnung). Wichtig ist nur das "zweiteAufgabe" erst nach diesen xy Minuten beginnt.
Ich habe garkeine Idee wie ich das umstzen könnte. 🙁 Jemand einen Tipp?
Wer der Herde folgt sieht immer nur Ärsche
Hallo unknown,
mit den Informationen die du uns gibst arbeitet der Code synchron. D.h. die Methoden werden genau in der Reihe aufgerufen wie sie im Code stehen.
Arbeiten diese Methoden intern asynchron? Und um welchen Kontext gehts überhaupt? Stell dir vor, die Frage liest jemand der von deinem Problem gar keine Ahnung hat und ob dieser dann weiß worum es geht. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 5.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo zusammen
Beschäftige mich im Moment auch in einem ähnlichen Bereich.
Es soll Commands geben, die intern synchron laufen "File => New Project" z.B. aber auch solche die asynchron laufen, wie "Build Project".
Daher wäre es wichtig, den Kontext zu kennen.
Hier ein Beispiel, wie spezifisch auf ein "Build Command" eingegangen wird:
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Die Datei "SchemaCompare.scmp" aus meinem Projekt ist geöffnet. Nun wird der SQL Schema Vergleich über SSDT gestartet:
//Schemavergleich starten
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichVergleichen");
danach wird das Script generiert:
//Skript generieren
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichSkriptGenerieren");
oder eben auch nicht, weil "SQL.SSDTSchemavergleichSkriptGenerieren" nicht ausgeführt werden kann wenn "SQL.SSDTSchemavergleichVergleichen" noch dabei ist zu vergleichen.
Das ist der gesamte Code der Methode.
Wer der Herde folgt sieht immer nur Ärsche
HI 🙂
Ich habe ein Add In für Visual Sutdio gebastelt, dieses gibt dem geöffnetem Programm die Anweisung ein Schmevergleich über SSDT zu starten.
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichVergleichen");
jetzt soll das Add In warten bis das Programm den Vergleich beendet hat und erst dann die nächste Funktion ausführen. Also sozusagen:
if(geöffnetesProgramm ist fertig mit Vorgang)
{
doSomething();
}
else
{
wait();
}
Application.DoEvents(); bringt da natürlich herzlich wenig, denn er wartet dann bis er den Schemavergleich gestartet hat und nicht weiter,schließlich ist seine Aufgabe damit ja auch beendet.
Jemand eine Idee? X(
Wer der Herde folgt sieht immer nur Ärsche
Da sich die Fragen inhaltlich nicht unterscheiden, sondern nur in der Formulierung, habe ich die Themen zusammen gefügt.
[Hinweis] Wie poste ich richtig? 1.2 und 2.2
Wer der Herde folgt sieht immer nur Ärsche
Hallo unknown
Ich kenne SSDT überhaupt nicht.
Am besten wäre es, wenn du über DTE z.B. prüfen könntest. z.B. ob eine Datei erstellt wurde, der Build fertig ist.
Ob diese Möglichkeit besteht, kann ich dir aber nicht sagen.
Sonst bleibt dir nur noch die Möglichkeit, wie folgt im Link beim vorherigen Beitrag beschrieben. Warten mit einem Timer, wenn du ungefähr weisst, wie lange es geht.
Oder: warten, nächste Aktion probieren, wenn nicht erfolgreich, warten usw.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter
leider wird dabei keine Datei erstellt, sonst wäre deine Lösungsidee echt schön gewesen.
Den Timer kann ich nicht verwenden, da sich die Zeit je nach geöffnetem Programm unterscheiden wird.
Ich habe es mit "probieren, warten, probieren" versucht:
//Schemavergleich starten
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichVergleichen");
Application.DoEvents();
bool fertig = false;
while (!fertig)
{
try
{
//Skript generieren
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichSkriptGenerieren");
fertig = true;
}
catch (Exception)
{
System.Threading.Thread.Sleep(100);
fertig = false;
}
}
aber irgendwie hängt der jetzt total fest und beginnt nicht einmal richtig den Schemavergleich.
Vielleicht mache ich irgendeinen blöden Fehler bei der while-Schleife? Lasse ich ihn zu lange oder zu wenig "schlafen"?
Arbeitet hier denn keiner mit SSDT ? 🙁
Wer der Herde folgt sieht immer nur Ärsche
Prinzipiell würde ich das Warten besser über einen Timer lösen (vmtl blockiert das Sleep) und dann auch deutlich länger. Du sagst der erste Vorgang dauert durchaus mehrere Minuten da brauchst du dann ja nicht alle 100ms prüfen, alle 10s sollte akzeptabel sein oder?
Und lass bitte das DoEvents weg 😉.
habe es gerade auf 20 sek geändert und warte jetzt 10 Minuten. Wenn der Vergleich dann immernoch nicht richtig gestartet wurde, versuche ich mal den Timer.
ja, das DoEvents(); ist schon draußen 😄
Wer der Herde folgt sieht immer nur Ärsche
läuft auch mit Timer nicht..
Dann zeig mal deine "Timer-Umsetzung".
private System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
//Schemavergleich starten
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichVergleichen");
//Timer
timer.Interval = 20000;
timer.Tick += new EventHandler(TimerEvent);
timer.Start();
private void TimerEvent(Object myObject, EventArgs myEventArgs)
{
try
{
//Skript generieren
m_Solution.DTE.ExecuteCommand("SQL.SSDTSchemavergleichSkriptGenerieren");
timer.Stop();
}
catch
{
}
}
Wer der Herde folgt sieht immer nur Ärsche