Ich hab dazu noch
ListBox.TopIndex
gefunden. Ggf hilft das auch weiter
http://msdn.microsoft.com/de-de/library/system.windows.forms.listbox.topindex.aspx
Ich bin einem Beispiel auf MSDN gefolgt und wollte erst mal die grundlegende Übertragung implementierten. Der Service sieht folgendermaßen aus:
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ImageService
{
private IEnumerable<FileInfo> _Files;
public ImageService()
{
this._Files = new DirectoryInfo(@"F:\Images").EnumerateFiles();
}
[OperationContract, WebGet, FaultContract(typeof(ArgumentOutOfRangeException))]
public Stream GetImage(uint num)
{
if (this._Files.Count() > num)
{
MemoryStream ms = new MemoryStream();
Bitmap bmp = new Bitmap(this._Files.ElementAt((int)num).OpenRead());
bmp.Save(ms, ImageFormat.Jpeg);
ms.Position = 0;
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg";
return ms;
}
else
throw new FaultException<ArgumentOutOfRangeException>(new ArgumentOutOfRangeException());
}
}
Der Aufruf so:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
this.stateText.Text = "begin loading image";
var client = new ImageServiceClient();
var obsGetImage = Observable.FromEvent<GetImageCompletedEventArgs>
(
h => client.GetImageCompleted += h,
h => client.GetImageCompleted -= h
)
.Take(1);
obsGetImage.Subscribe
(
args =>
{
BitmapImage bmp = new BitmapImage();
try
{
bmp.SetSource(new MemoryStream(args.EventArgs.Result));
this.img.Source = bmp;
}
catch (Exception ex)
{
do
{
MessageBox.Show(ex.Message);
}
while( (ex = ex.InnerException) != null );
}
this.stateText.Text = "finished loading image";
}
);
client.GetImageAsync(0);
}
Ich bekomme immer folgende Exceptions:
ex = Während des Vorgangs ist eine Ausnahme aufgetreten, sodass das Ergebnis ungültig ist. Weitere Ausnahmedetails finden Sie in InnerException.
ex.InnerException = Der Inhaltstyp "image/jpeg" der Antwortnachricht stimmt nicht mit dem Inhaltstyp der Bindung (application/soap+msbin1) überein. Wenn sie einen benutzerdefinierten Encoder verwenden, sollten Sie sicherstellen, dass die IsContentTypeSupported-Methode korrekt implementiert ist. Dier ersten 1024 Bytes der Antwort waren ...
Warum der Fehler auftritt ist mir klar, aber wie kann ich den "Inhaltstyp der Bindung" definieren?
das zeug ist einfach. Sei nicht sofort deprimiert, denn du solltest dir mal die Forum-Regeln hier durchlesen, da steht dick "Wir machen keine hausaufgaben!!". Übrigens, wenn wir das FÜR dich machen würden, würdest du nichts dazulernen ^^
Trotzdem viel glück...
Ein Ansatz wäre den relevanten Ausschnitt deines Codes zu posten, da wir nicht hellsehen können.
Hast du auf dem Control ein Label? Eventuell sogar im oberen drittel? Sollte dies der Fall sein, ist das auch der Grund dafür, dass auf das Click Event nicht reagiert wird. - Ansonsten kann ich dir auch nur mit mehr Informationen helfen.
Hallo,
ich habe einen WCF - Service von dem ich aus Silverlight aus zugreife. D.h. alle Aufrufe finden asynchron statt.
Ich muss jedoch an einer bestimmten Stelle auf die Ausführung der Methode warten. Hat jemand eine Idee wie man das tun kann?
Mit einem AutoResetEvent hängt sich der Browser auf, weil WaitOne() und die AsyncMethode() im selben Thread ausgeführt werden.
Ist es vielleicht möglich die asynchrone Methode mit dem EventHandler zu synchronisieren?
Ich hab den Client mal folgendermaßen erweitert:
public static IObservable<int> WaitTime(this ServiceClient client, int time)
{
var obsWaitTime = Observable.FromEvent<WaitTimeCompletedEventArgs>
(
h => client.WaitTimeCompleted += h,
h => client.WaitTimeCompleted -= h
)
.Take(1)
.ObserveOnDispatcher();
client.WaitTimeAsync(time);
return obsWaitTime.Select
(
x => x.EventArgs.Result
);
}
Aufrufen tue ich das ganze dann so:
ServiceClient client = new ServiceClient();
client.WaitTime(5000).Subscribe
(
returnValue =>
{
MessageBox.Show(returnValue.ToString() + " seconds elapsed");
}
);
MessageBox.Show("proceed");
Ich möchte, dass "proceed" erst nach "5000 seconds elapsed" erscheint. Mir fehlt nur die Möglichkeit wie
Okay, da das ganze jetzt unter Microsoft Cloud Programmability fällt ist es extern zu beziehen:
Reactive Extensions for .NET (Rx)
Vielleicht irre ich mich und hab mich nur dumm angestellt, aber wirkt auf mich alles noch ziemlich mies dokumentiert.
LSC schrieb:
CSL schrieb:
Die macht aus einem KeyCode ein Text, vermutlich auch in der Lokalisierten Version.
Ein Satz, drei Fehler. Wie blöd bist du eigentlich?
Du hast bisher auch nicht mit Wissen geglänzt, um ehrlich zu sein finde ich dein Auftritt bisher recht peinlich, nicht nur hier.
Ach was red ich, ich sollte Trolle einfach ignorieren.
Hallo,
der Code zum Setzen des Attributes ist richtig.
Mein Fehler war, daß ich meine ini-Datei mit einem '\' zuviel im Pfad ausgestattet habe. Deswegen konnte das Ganze natürlich nicht so funktionieren wie ich das wollte.
grüße
sub
Also, ich habe selber natürlich auch noch weitergeforscht. Ich bin aktuell auf folgendes Ergebnis gekommen, allerdings leider mit keiner 100% Garantie (nur ca. 90%, leichte Zweifel habe ich noch :)).
Wenn der Thread in ReadLine blockiert, dann ist er im Read des Sockets. Wenn man auf dem Stream Close aufruft und der NetworkStream das Socket besitzt, was man beim Konstruktor des NetworkStreams angeben kann, dann wird auch das Socket geschlossen. Falls man nicht sicher ist, ob die Bibliothek dem NetworkStream das Socket als Besitz übergibt, kann man auch direkt auf dem Socket Close aufrufen, sofern die Möglichkeit besteht.
Gut, wenn nun Close auf dem Socket aufgerufen wird, dann werden alle aktuellen Lese- und Schreiboperationen beendet. Dies scheint garantiert zu sein und man kann da auch mit einem anderen Thread das Close des Sockets aufrufen. Die Operationen geben dann einen Fehlercode zurück (also in der WinAPI/WinSocks). Dies führt in .Net zu einer IOException.
Und nun das Problem, wieso ich nur zu 90% sicher bin. Meine Informationen habe ich nur aus den MSDN Foren und zum Beispiel von der Dokumentation von closesocket . Ich habe leider nirgends eine offizielle Dokumentierung von diesem Verhalten in .Net gefunden.
Im MSDN Forum wird zum Teil sogar davon gesprochen, dass dies das ganz normale Vorgehen sein soll.
Falls jemand darüber noch mehr und bessere Informationen findet, dann immer her damit.
Grüssli
e7df4 schrieb:
Der "Webbrowser" in der Toolbos verwendet den IE7, richtig?
Der verwendet immer die IE-Engine, dessen IE auf dem System installiert ist.
Es gibt auch noch Projekte, die andere Engines unter .net (mehr oder weniger) nutzbar machen:
z.B.:
Webkit: http://webkitdotnet.sourceforge.net/
Gecko: http://code.google.com/p/geckofx/
http://msdn.microsoft.com/de-de/library/system.windows.forms.webbrowser.aspx
Buccino schrieb:
GPC schrieb:
4 bytes für etwas, dass man auch in 1 bit ablegen kann? Der Grund dafür liegt am memory alignment und darin, dass der GC leichter 4 bytes durch die Gegend schieben kann als 1 bit.
Wenn man relativ viele bools hat, kann man die in einem BitVector32 ablegen.
Als managed type hat bool in C# aber tatsächlich nur 1 byte (zeigt sich auch an sizeof(bool)). Beim Marshalling wird ein bool dann auf 4 byte erweitert.
Bedeutet das jetzt, dass CLR-intern generell immer 4 byte ver(sch)wendet werden, oder nur sobald ein interop im Spiel ist?
Letzteres. CLR-intern ist es idR 1 byte, aber es können auch auch zwei bytes sein, z.B. wenn man Nullable<bool> nutzt.
Zeig mal deine Klasse.
Hast du mal die System.Reactive Klasse aus dem S4 Toolkit in den Reflector geschmissen und geschaut ob die Methode dort wirklich unterstützt wird?