So oder so wirst du dich mit den Grundlagen der jeweiligen Plattform vertraut machen müssen ob HTML und JavaScript oder .Net Framework und C#.
Im Prinzip wurden dir die nötigen Tipps genannt um durchzustarten.
Hier nochmal kurz:
- Starte ein WinForms Projekt.
- Erzeuge dir ein Panel.
- DoubleBuffered im Panel einschalten.
- OnPaint überschreiben oder Paint Event abonnieren und los Zeichnen.
Edit: Zum Thema Performance. C# setzt zumindest bei WinForms auf die GDI+ API von Windows. Die ist mittlerweile in die Jahre gekommen und nicht das schnellste. Für die meisten Dinge reicht es allerdings noch.
Bei JavaScript hängt es stark vom Browser bzw. dessen JavaScript Engine ab. Chrome ist beispielsweise deutlich schneller als Firefox.
Ich hatte mal Avast vor einem Upgrade drauf und danach diverse Probleme mit Windows, Lösung war es Avast zu deinstallieren und Avast dann neu zu installieren.
Ich habe vor kurzem das Update 3 RC für VS 2015 installiert.
Bisher keine Probleme, bis ich heute das Threads Fenster gebraucht habe.
Kann mir jemand sagen ob Ihr das Threads Fenster unter Debuggen-> Fenster -> Threads öffnen könnt?
(Kann man nur bei während des Debuggings öffnen).
Sobald ich es versuche zu öffnen erhalte ich:
Fehler
"Ein Aufrufziel hat einen Ausnahmefehler verursacht."
In Projekten wo es offen wäre, steht folgende Exception drin.
Fehler
Ausnahmedetails:
System.Reflection.TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht. ---> System.ArgumentException: "PropertyMetadata" ist bereits für Typ "FrameworkElement" registriert.
bei System.Windows.DependencyProperty.ProcessOverrideMetadata(Type forType, PropertyMetadata typeMetadata, DependencyObjectType dType, PropertyMetadata baseMetadata)
bei System.Windows.DependencyProperty.OverrideMetadata(Type forType, PropertyMetadata typeMetadata)
bei Microsoft.VisualStudio.Debugger.DebuggerToolWindows.ThreadWindow.ThreadWindowControl..ctor(Boolean isInStandaloneMode)
bei Microsoft.VisualStudio.Debugger.DebuggerToolWindows.ThreadWindow.ThreadToolWindow.LoadThreadWindowControl()
bei Microsoft.VisualStudio.Debugger.DebuggerToolWindows.ThreadWindow.ThreadToolWindow..ctor()
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
bei System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
bei System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
bei System.Activator.CreateInstance(Type type, Boolean nonPublic)
bei System.Activator.CreateInstance(Type type)
bei Microsoft.VisualStudio.Shell.Package.InstantiateToolWindow(Type toolWindowType)
bei Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Type toolWindowType, Int32 id, UInt32 flags)
bei Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Type toolWindowType, Int32 id, ProvideToolWindowAttribute tool)
bei Microsoft.VisualStudio.Shell.Package.FindToolWindow(Type toolWindowType, Int32 id, Boolean create, ProvideToolWindowAttribute tool)
bei Microsoft.VisualStudio.Shell.Package.CreateToolWindow(Guid& toolWindowType, Int32 id)
bei Microsoft.VisualStudio.Shell.Package.Microsoft.VisualStudio.Shell.Interop.IVsToolWindowFactory.CreateToolWindow(Guid& toolWindowType, UInt32 id)
bei Microsoft.VisualStudio.Platform.WindowManagement.WindowFrame.ConstructContent()
Auf dem Bild sind Angular Controller und Razor Partials (Views), das können in Zukunft noch Angular Partials werden, aber das sollte noch kein Problem darstellen.
Der Hub wird in einem Service bzw. einer Factory bereitgestellt.
Im Controller binde ich mich an das on Event des Hubs und dieses Event wird pro Controller ausgeführt, immer wenn der Hub Daten sendet und damit das model nicht für die falsche View geschrieben wird muss ich diese Abfrage machen:
Das Grundproblem ist, dass das Model im Controller überschrieben wird, wenn ich die Abfrage mit
if (data.id === $attrs.exchange)
nicht drin habe, da das event logischerweise pro Instanziierung des Controllers gefeuert wird.
Ich bin derzeit darauf angewiesen die Daten mit data-exchange="@Model.Id" data-pair="@Model.Pair.Key" im vorraus mit zu übergeben. Die ja dann im $attrs zu finden sind.
Im Anhang noch ein Bild.
Wenn die Erklärung noch nicht reicht, versuche ich das mal in einem minimal Beispiel zusammenzufassen
Ich habe eine View die mehrfach auf einer Seite angezeigt werden kann.
Zudem habe ich ein Angular Controller der sich um diese View kümmern soll.
Meine Merkmale sind die @Model.Id und @Model.Pair.Key. Die kann ich auch dem Hub übergeben und bekomme die entsprechenden Daten, aber wie bekomme ich die Daten in models.ticker nur für die entsprechende View?
Ich verwende die $attrs um die Parameter im vorraus festzulegen und die Lösung funktioniert zwar, erscheint mir aber nicht sehr elegant.
Zudem muss ich die Daten derzeit Serverseitig zyklisch bereitstellen. Aber das ist ein anderes Problem.
Du kannst einfach alle Buttons auf die gleiche Methode binden. Auch im Designer, dazu musst du lediglich die entsprechende Methode bei dem Event auswählen.
Würde mich der Frage erweitert anschließen:
Frage nun:
Kann ich wie in dem vorangegangen Ansatz nicht nur das gerade aktive Fenster sondern auch die innerhalb von VS gerade aktive Datei auf irgendeine Weise eroieren.
Da solltest du wohl eher das Visual Studio SDK und dessen Doku konsultieren :)
Es handelt sich dabei um eine API die diverse Cryptocurrency Markt APIs unter einer zusammenführen soll.
Das ganze befindet sich stark in Entwicklung und ist in mehrere Module aufgeteilt.
IntTrader.API welche die eigentlich Abstraktion der Märkte darstellt. Derzeit teilweise implementiert sind Bitfinex.com und Kraken.com
Der IntTrader ist die Referenz Implementation der API in Form einer WPF Desktop Anwendung und mit IntTrader.Web ist eine Web Plattform auf Nancy Basis (Razor, MVC) in Entwicklung.
Den Fokus werde ich nun mehr auf die Web Anwendung legen, um Plattform unabhängiger zu bleiben.
Das Projekt liegt auf GitHub: https://github.com/Zicore/IntTrader und wie der Client aussieht kann man entweder dort sehen oder hier im Anhang.
Wer sich beteiligen möchte kann das gerne über GitHub machen oder mit mir in Kontakt treten.
Ziel des ganzen ist es eine Trading Plattform zu schaffen, bei der man mit einem Login an verschiedenen Märkten handeln kann.
Typisches Verhalten von Antiviren Programmen wie Avast. Prüft dein Programm in einer Sandbox und wenn es nichts feststellt, startet es das Programm wie gewohnt.
Das ist ja der Punkt, es muss eben nicht jeder die komplette Blockchain auf seinem Rechner haben.
Es reicht wenn es genügend Full Nodes gibt um das Netzwerk am Leben zu halten.
Soweit ich weiß, war es laut dem Paper von Satoshi Nakamoto nicht geplant das jeder Client die komplette Blockchain synchronisiert.
Wichtig aber, ist das die Miner mit steigenden Anforderungen schritthalten und das wird schätzungsweise noch lange der Fall sein.
Die Bandbreite bringt auch nur Probleme wenn viele gleichzeitige Transaktionen durchgeführt werden.
Mir fehlt leider die Zeit um die Informationen detailierter zusammenzufassen.
Die Community hinter Bitcoin ist allerdings schon so riesig, dass eine Lücke m.E. entweder schnell gefunden werden würde oder aber schnell behoben werden würde.
Erst kürzlich hatte ein Miningpool bedrohliche 45% an Hashingpower erreicht.
Die Reaktionen in der Community waren super, viele haben sofort reagiert auf die Gefahren hingewiesen und den Pool gewechselt. Sogar der Poolbetreiber hat verlauten lassen die 51% auf jedenfall zu verhindern.
Niemand kann vorhersehen ob es in Zukunft zu Problemen kommen wird, da heißt es einfach abwarten und die Lage im Auge behalten.
Jeder muss selbst bewerten ob das Risiko tragbar ist.