Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Witam



...... dostaje błąd od serwisu jak wklejam kod :/ coś o rozmawianiu z serwerami


chodzi o
http://www.codeproject.com/Articles/12499/Run-Time-Cod...

w z kompilowanym programie chcę odpalić liczenie w pętli a w wewnątrz co jakiś czas robić wyświetlanie pośrednich danych na formatceTen post został edytowany przez Autora dnia 07.12.15 o godzinie 23:08
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Wklej błąd, który dostajesz.
Podejrzewam, że może chodzić o to, że próbujesz modyfikować okno z innego wątku niż wątek główny. Jeśli tak, to będziesz musiał użyć Dispatchera .
Grzegorz Kot

Grzegorz Kot Programista .NET

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Pewnie chodzi o "cross-threading". Jeśli chcesz to załatwić w prosty sposó bez użycia rozbudowanych delegatów lub method invokerów itd użyj prostego Invoke i Action

przykład:

Chcę zaktualizować polę typu Int dla obiektu Progressbar

W metodzie wywoływanej w wątku umieszczam następujące odwołanie:

progressbar.Invoke(new Action(( ) = > {

//akcja
progressbar.Value++;

}));
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

bardzo prosty przykład kodu jest tu:
http://marcin.stasiak.kubala.tv/enigma_engine2_kod.txt

Przepraszam że tak słabo opisałem, nie spodziewałem się że na goldeLine jest jeszcze Ktoś aktywny poza HR ;)

Czytam o wymienionych tematach,

Dziękuje i pozdrawiam, Marcin noHuman'ekTen post został edytowany przez Autora dnia 09.12.15 o godzinie 02:39
Grzegorz Kot

Grzegorz Kot Programista .NET

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Hmm widzę, że mój temat odwołuję się do crossthreadingu, jednak u Ciebie, to coś więcej. Bo to fakt, starasz się odwołać tak jakby do innego wątku, ale dodatkowo (jeśli dobrze rozumiem, bo ciężko się było doczytać po tym opisie) starasz się wywołać metodę z głównego wątku w kodzie kompilowanym dynamicznie. Tutaj znalazłem przykład jak zrobić, to ale na odwórt. Czyli jak wywołać metodę z kodu kompilowanego dynamicznie w głównym wątku.

http://www.blackwasp.co.uk/RuntimeCompilation_2.aspx
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

no właśnie odpalane metod w głównym wątku to podstawowa metoda korzystania z skompilowanego programu, ale jak się ten skompilowany kod 'zawiesi' np. na nie kończącej się pętli to główny wątek też wisi :( więc to chyba formalnie ten sam wątek albo przynajmniej praca synchroniczna

a ja potrzebuje nie kończących się pętli do obliczeń, jedyne co wymyśliłem to kończyć metodę przy jakimś zdarzeniu za pomocą 'return' i potem odpalać ją z parametrem wskazującym gdzie ukończyła który "wskoczy" z powrotem do pętli za pomocą GOTO, a To bym zapakował w backgroudWorker'a

Tyle że jak kod się rozrośnie to takie wskakiwanie za pomocą goto może być trochę nieczytelne i sam się pogubię

mogę też w kodzie kompilowanym wysyłać dane na server SQL i aplikacji głównej pobierać te dane ..... nie eleganckie i penie nie wydajne :( Ten post został edytowany przez Autora dnia 10.12.15 o godzinie 03:32
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Zacząłbym od tego, że kompilowany kawałek kodu nie powinien zakładać, że istnieje jakiś progressbar w głównej aplikacji. Zamiast tego powinna być wystawiona jakaś publiczna właściwość, którą będzie na bieżąco aktualizować. Następnie główna aplikacja powinna odwoływać się do tej właściwości. W ten sposób kod będzie bardziej modularny.

Aby mieć pewność, że taka właściwość będzie w kompilowanym kodzie proponuję zastosować interfejs (interface) z właściwością Progress.
Marek Kubiś

Marek Kubiś programista c#

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Marcin Paweł S.:
a ja potrzebuje nie kończących się pętli do obliczeń,
OK, więc proszę napisać te pętle tak by obliczenia były realizowane prawidłowo bez dynamicznego osadzania kodu i bez wątków. Jak te obliczenia wykonywane będą prawidłowo w "sposób tradycyjny" wtedy jest sens przyglądać się jak wykorzystać wielowątkowość. A osadzanie dynamicznie kodu to jeszcze inne zagadnienie jak dla mnie.
jedyne co wymyśliłem to kończyć metodę przy jakimś zdarzeniu za pomocą 'return' i potem odpalać ją z parametrem wskazującym gdzie ukończyła który "wskoczy" z powrotem do pętli za pomocą GOTO, a To bym zapakował w backgroudWorker'a
Masakra :-( Przepraszam za uwagę ale takie podejście ma w sobie nie mniej błędów niż te pojawiające się w tytule wątku. :-( Przepraszam za uwagę ale to razi, przynajmniej mnie.
mogę też ..
Można różnie ale przedstawiony pseudokod jak dla mnie jest tak nieczytelny, źe bez rozsądnego podziału na metody trudno będzie się w tym połapać jak kolejne funkcjonalności będą dopisywane. :-(
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

To co wkleiłem(link) to nie pseudokod tylko Działający kod, ten na którym próbuje szukać rozwiązania ale przytnę i opiszę Go lepiej, pewnie dlatego że trochę przy nim spędziłem czasu wydaje mi się dziecinnie prosty i myślałem że dla Każdego , przepraszam

To czy umiem napisać 'obliczenia' "normalnie" i będzie działać wydajnie to teraz średnio istotne. zależy mi na opanowaniu tej techniki w C# bo w takim PHP czy SQL jest b. prosto to zrobić tylko wydajność w przyszłości :/

Nigdy nie twierdziłem że to są 'wątki' to było skojarzenie osób odpowiadających ;] podobnie jak nic nie pisałem ani w postach ani w kodzie o progress bar'ach .... to tylko przykład. bardzo mało znajduję na ten temat w necie i nawet jak jest więcej to nie wiem jak pytać G. Chodzi mi o abstrakcyjny przykład a nie rozwiązanie za mnie "zadania domowego" ;]

Pozdrawiam, MarcinTen post został edytowany przez Autora dnia 10.12.15 o godzinie 14:20
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Napisz najlepiej od początku co chcesz uzyskać. Może uruchamianie dynamicznego kodu wcale nie jest potrzebne aby rozwiązać twój problem?
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

prawdopodobnie osadzanie kodu nie jest potrzebne ale... bardzo by mi zależało na poznaniu technik programowania w ten sposób.

tematem którym chce się zająć i nauczyć się na jego podstawie to łamanie szyfrów podstawieniowych siłowo. b. proste problemy tego typu potrafię rozwiązywać w SQLu pisząc to ala deklaratywnie, wydajność jest b. zła ale "ile zabawy" poza tym pozwala spojrzeć na problem z innego punktu. pomyślałem że zamiast robić JOIN 20 tabel można zagnieździć w sobie 20 pętli i napisałem kod PHP generujący kod C# robiący to, wydajność jest kosmiczna w porównaniu z SQLem ale chciałbym "generator" kodu mieć w C# i móc napisać aplikacje okienkową a nie w WWW wklejać szyfr potem wklejać w VS wygenerowany kod C# i kompilować
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

A użycie mechanizmów "relection" (polskie tłumaczenie: refleksja lub odbicie) z C# nie rozwiązałoby twoich problemów. Za ich pomocą możesz przeglądać i modyfikować składowe klas programu "w locie" (np. dodawać nowe metody, składowe klas , lub nawet tworzyć nowe klasy i obiekty ) ? Możesz tak tworzyć np. nowe obiekty dziedziczące po klasie "BackgroundWorker" aby nowe obliczenia wykonywać w nowych wątkach.

2) Rozwiązanie nr. 2 (potencjalne): Delegaty - do-rejestrowywać nowe delegaty o określonej sygnaturze i wykonywać.

Pozdrawiam.Ten post został edytowany przez Autora dnia 10.12.15 o godzinie 15:56
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Może da się postawić breakpoint w kompilowanym kodzie i podejrzeć wartości zmiennych z kodzie głównym ?

Szukam na G. ale może Ktoś podpowie jak zrobić wydajną i prostą
komunikację między procesową (nie między wątkową) w C# ??

PS: znalazłem
System.Diagnostics.Debugger.Break();

Przerywa działanie kodu podobnie jak breakpoint :) i działa w skąpilowanym kodzie, tylko nie wiem jak to zautomatyzować żeby dorwać się automatycznie do danych .... może coś na bazie tego Ktoś podpowie ?

PPS:
Próbowałem rejestrować delegat z programie głównym i wysyłać do skompilowanego gdzie był identyczny ale pisał że jednak nie są identyczne :/ więc zakładam że delegaty nie działają między "procesami"

PPPS:>
Maciej G.:
Maciej Gabryelski nie bardzo załapałem odrazu Twoją wypowiedz o reflection, jak w locie dodać nową składową klase obiektu i ją wykonać ?? to by rozwiązało pewnie problemy o ile by nie było problemów z wydajnością :)
Wklej proszę link do przykładu, Dzięki :) oczywiście szukam na G. .... testuje :)

w swojej naiwności myślałem że ten przykład co zamieściłem to właśnie ta refleksja o której oczywiście już słyszałem ;)))Ten post został edytowany przez Autora dnia 10.12.15 o godzinie 16:49
Maciej G.

Maciej G. Projektant /
Programista, Famor
S.A.

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Marcin Paweł S.:
Może da się postawić breakpoint w kompilowanym kodzie i podejrzeć wartości zmiennych z kodzie głównym ?

PPS:
Próbowałem rejestrować delegat z programie głównym i wysyłać do skompilowanego gdzie był identyczny ale pisał że jednak nie są identyczne :/ więc zakładam że delegaty nie działają między "procesami"
Musiałeś żle zadeklarować sygnaturę delegata (przekazywane parametry_. Jak zrobisz to dobrze to na 100% będzie działać. Poszukaj przykładów w sieci są ich setki.
PPPS:>
Maciej G.:
Maciej Gabryelski nie bardzo załapałem odrazu Twoją wypowiedz o reflection, jak w locie dodać nową składową klase obiektu i ją wykonać ?? to by rozwiązało pewnie problemy o ile by nie było problemów z wydajnością :)
Wklej proszę link do przykładu, Dzięki :) oczywiście szukam na G. .... testuje :)
Przykłady;

http://stackoverflow.com/questions/3862226/dynamically...

https://msdn.microsoft.com/en-us/library/exczf7b9%28v=v...

http://stackoverflow.com/questions/1121441/addeventhan...

http://stackoverflow.com/questions/9335126/compile-tim...

http://www.codeproject.com/Tips/715891/Compiling-Cshar...

w swojej naiwności myślałem że ten przykład co zamieściłem to właśnie ta refleksja o której oczywiście już słyszałem ;)))
Za pomocą refleksji powinno udać Ci się osiągnąć to co opisałeś (o ile dobrze zrozumiałem twoją wypowiedź). Temat jest dość zaawansowany i najlepiej samemu porobić trochę eksperymentów aby dobrze zrozumieć temat.

Pozdrawiam.Ten post został edytowany przez Autora dnia 10.12.15 o godzinie 17:29
Marek Kubiś

Marek Kubiś programista c#

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Marcin Paweł S.:
To co wkleiłem(link) to nie pseudokod tylko Działający kod, ten na którym próbuje szukać rozwiązania
Określenia pseudokod nie użyłem w znaczeniu potocznym lecz tak jak to definiuje inżynieria oprogramowania na okreśenie kodu, który ma pokazać ideę bez wchodzenia w szczegóły.
wydaje mi się dziecinnie prosty i myślałem że dla Każdego , przepraszam
Ale pytasz jak zrobić bo jest źle, a z tego co przedstawiłeś nie wynika ani co chcesz osiągnąć ani co jest źle. Nic więc dziwnego, że nie tylko ja ale i inni koledzy dopytują. Przeprosiny zbędne bo niepewność co do meritum problemu chyba u wszystkich czytających.
tematem którym chce się zająć i nauczyć się na jego podstawie to łamanie szyfrów podstawieniowych siłowo.
Chodzi o atak, czyli np: przechwycenie obcego zapytania SQL i odkodowanie go przy założeniu, że to szyfr podstawieniowy?
b. proste problemy tego typu potrafię rozwiązywać w SQLu pisząc to ala deklaratywnie,
Można poprosić o przykład bo mam wątpliwości czy dobrze rozumię?
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Marek K.:
Chodzi o atak, czyli np: przechwycenie obcego zapytania SQL i odkodowanie go przy założeniu, że to szyfr podstawieniowy?
eee przepraszam ale wyciąga Pan jakieś zupełnie błędne/fantastyczne wnioski łącząc fragmenty moich wypowiedzi :/ .... chyba że coś źle Ja napisałem , co w sumie prawdopodobne

Marek K.:
>Można poprosić o przykład bo mam wątpliwości czy dobrze rozumiem?
http://91.189.216.37:777/subst.php
http://91.189.216.37:777/subst2.php
http://91.189.216.37:777/subst4.php
http://91.189.216.37:777/subst5.php << To generuje fragment kodu C#

Obawiam się że Ja źle Pisze a Pan źle rozumie .... ale mam nadzieje że się jakoś "dogadamy" :) :) :)
To proste przykłady i nie uważam że w praktyce coś wartę, robię to hobbistycznie jak rozwiązywanie krzyżówek ;] ((PS: Może napisze program do rozwiązywania/generowania krzyżówek ;) ))

> Marek K.:
Określenia pseudokod nie użyłem w znaczeniu potocznym lecz tak jak to definiuje inżynieria > oprogramowania na okreśenie kodu, który ma pokazać ideę bez wchodzenia w szczegóły.
Mea culpa, słusznie Pan zakłada że mam braki w wykształceniu :/

PS: CIL jest ciekawy ale czy nie można skompilować kodu c# z string'a ?? było by fajnie coś nie pasuje mi trochę do konwencji :]

Jak w Visual Studio podglądną kod CIL po skompilowaniu? :
znalazłem coś takiego : http://ilspy.net/Ten post został edytowany przez Autora dnia 11.12.15 o godzinie 09:23
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

CIL jest ciekawy ale czy nie można skompilować kodu c# z string'a ?? było by fajnie coś nie pasuje mi trochę do konwencji :]

Można i jest na to wiele sposobów:
- CodeDOM i CsharpCodeProvider, którego użyłeś w przykładzie
- System.Linq.Dynamic.DynamicExpression.ParseLambda
- Roslyn

Wybrana metoda zależy od konkretnego przypadku.

W SQL Server można również umieszczać procedury składowane napisane w C#

Ale poruszyłeś tyle zagadnień, że się pogubiłem.
Marek Kubiś

Marek Kubiś programista c#

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

Marcin Paweł S.:
eee przepraszam ale wyciąga Pan jakieś zupełnie błędne/fantastyczne wnioski łącząc fragmenty moich wypowiedzi :/ .... chyba że coś źle Ja napisałem , co w sumie prawdopodobne
Bo strasznie niepoukadane jest to co piszesz. Bazą jest programowanie (myślenie) strukturalne, później obiekty, zdarzenia, wątki a na końcu procesy - wtedy jest szansa na ogarnięcie złożonych zagadnień, a do takich się odwołujesz.
Marek K.:
>Można poprosić o przykład bo mam wątpliwości czy dobrze rozumiem?
To proste przykłady i nie uważam że w praktyce coś wartę, robię to hobbistycznie jak rozwiązywanie krzyżówek ;]
To rzeczywiście brutal force. Hobby uprawiamy zazwyczaj dla rozrywki ale jak jest w tym jakiś cel to i satysfakcja większa i sens temu nadany. Chyba więc warto wiedzieć dlaczego lubimy robić to czy tamto.

Marcin Paweł S.:
Szukam na G. ale może Ktoś podpowie jak zrobić wydajną i prostą
komunikację między procesową (nie między wątkową) w C# ??
Klasa Mutex, a aby zrozumieć jak używać przyklad) wzorzec projektowy "Singleton" (też tutaj).

Komunikacja międzyprocesowa jest także komunikacją międzywątkową z definicji. A wieszanie się aplikacji wieloprocesowej to deadlock.

Wymieniona klasa Mutex pozwala temat ogarnąć ale jak chcemy mieć wiele aktywnych instancji tego samego procesu to wypada do tematu podejść trochę inaczej. Należy znaleźć coś co pozwoli nam odróżnić procesy, ot choćby znacznik czasu, i obsługiwać je (blokować (locks) i sprawdzać czy się zakończyły) wg założonej kolejności.

Można też użyć metodę Monitor.TryEnter().

Aby zrozumieć rozwiązanie wystarczy przespacerować się na najbliższe skrzyżowanie dróg czy dworzec kolejowy i przyjrzeć się jak działają światła drogowe czy semafory. Chodzi o to aby nie było korka ani kolizji. W programowaniu mamy poprzez analogię semafory i mogą one być binarne lub wielowartościowe. A jak jest GOTO to najbardziej prawdopodobne, że będzie tak jak tu.
Marcin Paweł S.

Marcin Paweł S. programista
C#/SQL/PHP

Temat: Jak zrobić zdażenia w samo kąpilującym się programie ??

A jak jest GOTO
Wiem, wiele lat programowałem na basic(ten w ROMie IBM XT) i qbasic .... na wspomnienia mi się zbiera ;] hehe

Przepraszam za chaos w wypowiedziach, z jednej strony tak myślę z drugiej rzadko się wypowiadam i muszę poćwiczyć :)

.... czytam o wspomnianych tematach .... koduje małe "wprawki" i pewnie jeszcze zapytam szanowne grono o parę rzeczy . jestem bardzo wdzięczny za pomoc :)

PS: najbardziej ciekawy jest CsharpCodeProvider i do kąpilowywanie metod do programu w locie z kody C# ...... CIL fajny ale słabo mi się w nim debuguje .... ale to pewnie kwesta gustu z C# już jako tako znam Ten post został edytowany przez Autora dnia 11.12.15 o godzinie 12:56

Następna dyskusja:

Repozytorium encji + RepoLo...




Wyślij zaproszenie do