|
I am making a application in c# (Visual Studio 2015) and I need make a begininvoke from a form that is hidden. how I do this?
|
|
|
|
|
The visibility of the form doesn't have any bearing on you calling BeginInvoke. So... what's the problem?
|
|
|
|
|
I have to save & print thousands of these valuation records every year. It is my understanding that the fastest way to automate the process in C# is using httprequest. This particular website is giving me problems, Im guessing because of the 'JS_doPostback.' Anyone who could figure this one out would save me weeks of work every year, and would be a godsend! Below is an example of what i am having to thousands of times manually:
1. Navigate to Home page & click the link for 'Real Estate Tax':
2. Search by Account# or Parcel#
3. Find the page with the most recent statement and Click 'Details' (right now would be for year 2015 on page 3)
4. Save and or print this page. (Reaching this page and downloading it is my ultimate goal I am trying to achieve) I have pasted the website and account Numbers for example down below.
Home-Page:
https://egov.buchanancounty-va.gov/applications/TRAPPS/default.htm
3 Account#'s to use for example:
14327, 2877, 2983
Any help would be greatly appreciated!
|
|
|
|
|
My WCF REST service was created in a class library, hosted in a console app, and consumed in a console app.
Please see code below and my point out why both ID and StartTime are empty when I try to retieve them in my client app.
public class Player
{
public string ID { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
public Player()
{
ID = Guid.NewGuid().ToString();
StartTime = DateTime.Now.ToString();
}
}
[DataContract]
public class ChessGame
{ [DataMember]
public List<Player> Players { get; set; }
[DataMember]
public string PlayerId { get; set; }
public Facility()
{
Players = new List<Player>();
PlayerId = string.Empty;
}
public void StartGame()
{
Player p = new Player();
PlayerId = p.ID;
Players.Add(p);
}
}
public class GameService:IGameService
{
ChessGame cg = new ChessGame();
public void StartGame()
{
cg.StartGame();
}
public string GetPlayerID()
{
return cg.PlayerId
}
public string GetStartTime(string id)
{
return cg.Players.Find(p => p.ID == id).StartTime;
}
}
[ServiceContract]
public interface IGameService
{
[WebInvoke(UriTemplate = "Game/", Method = "POST", ResponseFormat = WebMessageFormat.Xml)]
[OperationContract]
void StartGame();
[WebGet(UriTemplate = "ID/", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml)]
[OperationContract]
string GetPlayerID();
[WebGet(UriTemplate = "Time/{id}", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml)]
[OperationContract]
string GetStartTime(string id);
}
static void Main(string[] args)
{
string ID = string.Empty;
ChannelFactory<IGameService> channelFactory = new ChannelFactory<IGameService>(new WebHttpBinding(), "http://localhost:8080");
channelFactory.Endpoint.Behaviors.Add(new WebHttpBehavior());
IGameService channel = channelFactory.CreateChannel();
channel.StartGame();
ID = channe.GetPlayerID();
Console.WriteLine("ID is: {0} ", ID);
Console.WriteLine("Game started at: {0} ", channe.GetStartTime(ID));
Console.Read();
}
modified 3-Jun-16 19:38pm.
|
|
|
|
|
You should just past some literal strings back initially to confirm things are hooked up properly.
After that, you will find (in my experience) that WCF REST services are "stateless".
You will need to "save and restore" your (unique) game state if you want to "run" a game; your calls are simply creating a new "Game Service" every time they are invoked ...
(Recall the infamous "out of sync" playing MMPGs).
|
|
|
|
|
Yes, you are right that WCF REST is stateless and the data created in one call is replaced by data created by a new call but this does not make it easy to work with.
This means I have to create a huge database to store the state of each object in the game? How do you go about handling this issue?
modified 3-Jun-16 20:25pm.
|
|
|
|
|
I would study the game files of something like the Age of Empires franchise.
Creating and editing scenarios; saving a game; recording and playing back a game; etc. are all game functions that maintain and process "state information".
(I used to hack Ultima game files way back when to alter "state" (i.e. weapons) info.)
|
|
|
|
|
I want to monitor FTP and SFTP locations so that if any new files uploaded into these folders, I will be able to download them immediatly.
I tried using FileSystemWatcher to do this task, but it can monitor local path or shared path and not FTP/SFTP.
Can anyone please help provide some idea on how to accoplish this task?
Cheers
A.M.Jegan
|
|
|
|
|
Where are your FTP/SFTP locations?
|
|
|
|
|
FTP and SFTP locations are in remote servers. I am planning to create a windows service that should monitor FTP folder
Cheers
A.M.Jegan
|
|
|
|
|
Your question implies you wish to watch FTP/SFTP locations on a server - this can be done, either, obviously running the application from the server, or, using a UNC Path / share mapped on the server with appropriate permissions etc
|
|
|
|
|
I am planning to write a windows service which will monitor FTP/SFTP locations in remote server. These FTP/SFTP will have its own credentials to connect.
How can we specify these credentials with FileSystemWatcher? Or do we have any other approaches to handle this situation?
Cheers
A.M.Jegan
|
|
|
|
|
Two approaches - I havnt tried the first
1) Connect to a UNC Path with Credentials[^]
2a) use the 'guts' of the code here C# Map Network Drive (API)[^] to map a drive from your 'local' machine to the server when the service starts or errors (see comment at bottom) - lets say you map Z: -> \server\path\folder-to-watch ... then you watch @"Z:\" with the FileSystemWatcher
2b) set up a persistent mapping from your local machine to the server with the 'NET USE' command as in
net use z: \server\path\folder-to-watch /user:Domain\UserName password /persistent:yes
then watch @"z:\" in FileSystemWatcher
One issue you may find using FileSystemWatcher to a remote/Server is that the connection may die if your network isnt top notch/experiences transient errors, so you may need to catch errors from filesystem watcher and handle the issue - that leads to using 2a as a solution - else you may need to restart the service and/or have a watchdog process
|
|
|
|
|
An alternative idea, without a dependency to the FileSystemWatcher ; start by installing IIS on the machine, or any other webserver. Expose your files there (do make sure to have a login protecting the links, if your FTP-server requires credentials).
You can now request a header, and once you have the file, you should remember its date and time. You can now easily check if the file on the webserver has changed, using the date/time and html status 304.
If you include a list of "all files" in the same folder (as text, json, whatever), then you could expose that; if that has been modified, would mean that "any" of the files on FTP have been changed. Without the list, one could iterate the files, if there's not too many.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
The class MediaPlayer can play Music on OS Win7 32bit/64bit,but it can't work on OS Windows XP,I installed these OS in Virtual Machine VMware Workstation and installed .Net Framework 4.0 on OS ,could someone can help me?
modified 3-Jun-16 2:00am.
|
|
|
|
|
Check your application build settings, and change them from "any cpu" to "x86".
That will force it to build as a 32 bit app, and the WMP control should work.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Thanks for your reply ,in fact,I changed the build settings from "any cpu" to "x86",otherwise ,the app can't run.
|
|
|
|
|
Can I use finalizers as a backup for when IDisposable objects are not properly disposed?
I'll use a class that contains a thread as an example
public sealed class TaskExecuter : IDisposable
{
private Thread _thread;
~TaskExecuter()
{
if (_thread != null && _thread.ThreadState != ThreadState.Stopped)
{
_thread.Join();
}
}
private void Dispose(bool disposing)
{
if (disposing)
{
_thread.Join(1000);
}
}
public void Dispose()
{
Dispose(true);
GC.SupressFinalize(this);
}
}
So in this case, the class has a thread that it can reuse through the lifespan of the class. What I am concerned with is what if I or another developer creates this class, uses it, and forgets to dispose of it. This would leave the thread in an uncontrollable state and not to mention certain other system objects until the program is terminated.
Can I prevent this by making other checks in a finalizer?
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
It can so long as your Finalize code doesn't mind being executed on a separate thread other than the one that created your instance and you don't care when the Finalizer gets called because you don't have control over it and it may take a good chunk of time after the object is flagged as dead before it gets called.
|
|
|
|
|
Ah, so would Thread.Join() throw an access exception if called in the finalizer? In the case that I working on, it doesn't matter when the finalizer gets called. I am just looking for ways to ensure that threads and other system objects get disposed of in the event that Dispose() does not get called before the object goes out of scope.
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
Access exception? Probably not, but calling Join in the Finalizer is definitely a bad idea.
|
|
|
|
|
Well, in that regard, I have another question. To explain a little more on the use-case that orginated this question, I have built a ThreadPool that spawns and terminates threads as it sees fit and it works well for that purpose. Up until now, I have been the only one to use that code but it might be making it's way into a larger library and I want to protect against the eventuality of a forgetful programmer. Is there a safe way to shut down those threads from the finalizer or is it better to safely abstract that away from the API?
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
OK, you're trying to protect the programmer from her/his self. It gets to the point where you're going overboard to protect someone who should know better. We all know (if we know what we're doing that is) if the object exposes a Dispose, you call it. Simple as that. Trying to make sure an idiot can use your code without issues just puts all of the work on you and none of the work on them, for what gain?
Can it be done from the Finalizer, sure. Is it a good idea? No. Can the user still run the system out of resources? Yep, because you cannot deterministically force a Finalize. The GC will get around to it whenever it feels like it and that may be AFTER the system has run out of a resource.
|
|
|
|
|
I see your point. Do what you can to ensure things run right but don't waste a lot of time on the what if scenarios.
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
You should definitely read Eric Lippert's two blog posts on finalizers:
When everything you know is wrong, part one | Fabulous adventures in coding[^]
When everything you know is wrong, part two | Fabulous adventures in coding[^]
Particularly this part:
Quote: If you have a tree of objects and you are finalizing the root, then the children are still alive — because the root is alive, because it is on the finalization queue, and so the children have a living reference — but the children may have already been finalized, and are in no particularly good state to have their methods or data accessed.
Also:
Therefore, it is vitally important that finalizers do as little work as possible. Remember also that although all object pointers remain valid during finalization, it might be the case that those pointers lead to objects that have already been finalized and might therefore be less than useful. It is generally safest to avoid following object pointers in finalization code even though the pointers are valid. A safe, short finalization code path is the best.
And:
* Implement Finalize only if you hold unmanaged resources across client calls.
* Keep finalizer code simple to prevent blocking.
- Do not issue calls that could block the calling thread.
Basically, calling Thread.Join from a finalizer seems like a very bad idea.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|