|
You going to have to put breakpoints on and check, the method should be entered at least once when streamImage calls it. You shouldn't be "cycling" as such, the code should be called once, go into the "else" block which calls the method once under the dispatcher thread (entering the if block and ending). If you need to loop then I don't understand the purpose of your code.
If you are entering the "else" block without going to the "if" It could be that you don't want the asynchronous BeginInvoke and you need a straight Invoke instead, but I don't know why you chose the async method in the first place. It may be the dispatcher is being destroyed before the async method is called, I really can't remember if this is possible, or if an exception is thrown if it does. It could also be that the Dispatcher is running something on a higher priority that is blocking your opertation, but I think this is less likely.
Can't be much more help than that I'm afraid.
“Education is not the piling on of learning, information, data, facts, skills, or abilities - that's training or instruction - but is rather making visible what is hidden as a seed” “One of the greatest problems of our time is that many are schooled but few are educated”
Sir Thomas More (1478 – 1535)
|
|
|
|
|
the complete code is the following:
public partial class MainWindow : Window
{
Thread newtrd;
public MainWindow()
{
InitializeComponent();
}
public delegate void Del(Image images, string url);
public void setImage(Image images,string url)
{
if (images.Dispatcher.CheckAccess())
{
BitmapImage img = new BitmapImage();
img.BeginInit();
var date = DateTime.Today.Hour;
img.UriSource = new Uri(url + "?" + date);
img.EndInit();
img.Freeze();
images.Source = img;
}
else
{
images.Dispatcher.BeginInvoke(new Del(setImage), DispatcherPriority.Normal,
new object[] { images, url });
}
}
public void StreamImg()
{
while (true)
{
try
{
setImage(image1, @"http://ipaddress/jpg/image.jpg");
}
catch (Exception x)
{
MessageBox.Show(x.Message.ToString() + "\n Chiudere il Programma dal pulsante Exit");
}
Thread.Sleep(500);
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
newtrd = new Thread(new ThreadStart(StreamImg));
newtrd.IsBackground = true;
newtrd.Start();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
if (newtrd.IsAlive)
{
newtrd.Abort();
}
this.Close();
}
}
}
I use delegates to overcome the problems of access to the thread
|
|
|
|
|
Here's a little trick for you - there's no need to do cross thread access on a BitmapImage . As this class inherits from Freezable , you can simply call Freeze on the BitmapImage object before you assign it to images.Source . Your code could end up like this:
public void StreamImage()
{
while (true)
{
var date = DateTime.Today.Hour;
string url = @"http://ipaddress/jpg/image.jpg?" + date;
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(url);
image.EndInit();
image.Freeze();
images.Source = image;
}
}
|
|
|
|
|
i tried this solution, but I got another error: Unable to lock this Freezable.
|
|
|
|
|
Ah yes. You're getting this because your Uri is still downloading the stream. If you hook into the DownloadComplete event on the BitmapImage, you can freeze the image at that point.
|
|
|
|
|
Yes, i want the stream, the live stream of the my Ip-Cam...the only solution is to use the Thread... n fact, I used it with the windows form and didn't give me no error..
|
|
|
|
|
So the solution I mentioned (hooking the DownloadComplete event) will sort this for you.
|
|
|
|
|
thanks for the reply, but it does not work the same, whether the method that freeze the video stream ..
|
|
|
|
|
What do you mean by it doesn't work the same? What does your code look like now?
|
|
|
|
|
Now, my code show me only one image, and not the video stream.. and if i use freeze method, the code generate the error! if you want i post my code..
|
|
|
|
|
If you don't post your code, I can't see what's wrong with it.
|
|
|
|
|
you're right.. XD
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
DispatcherTimer timer1 = new DispatcherTimer();
public BitmapImage StreamImage()
{
while (true)
{
var date = DateTime.Now.Hour;
string url = @"http://ipaddress/jpg/image.jpg?" + date;
BitmapImage image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(url);
image.EndInit();
image.DownloadCompleted += new EventHandler(image_DownloadCompleted);
return image;
}
}
public void image_DownloadCompleted(Object sender, EventArgs args)
{
image1.Source = StreamImage();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
timer1.Interval = new TimeSpan(0, 0, 5);
timer1.Tick += new EventHandler(image_DownloadCompleted);
timer1.Start();
}
}
this is all the code....
|
|
|
|
|
The problem is that you are returning out of your while loop, so you will only get 1 image. Try this instead:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
DispatcherTimer timer1 = new DispatcherTimer();
public void StreamImage()
{
while (true)
{
var date = DateTime.Now.Hour;
string url = @"http://ipaddress/jpg/image.jpg?" + date;
BitmapImage image = new BitmapImage();
image.DownloadCompleted += (s,e) =>
{
image.Freeze();
image1.Source = image;
}
image.CacheOption = BitmapCacheOption.OnLoad;
image.BeginInit();
image.UriSource = new Uri(url);
image.EndInit();
}
}
public void StartStreaming(Object sender, EventArgs args)
{
StreamImage();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
timer1.Interval = new TimeSpan(0, 0, 5);
timer1.Tick += StartStreaming;
timer1.Start();
}
}
|
|
|
|
|
i tried your solution, but i've not ouput... the code doesn't show the video stream, but also the image..it always load.....but then a few minuts it show me this error:
Exception of type 'System.OutOfMemoryException'.
|
|
|
|
|
Hoo boy - I've just reexamined the rest of your code. Remove the while part, and let the timer take care of itself. Basically, you have a timer firing, and in the time it's firing, you're creating while loops that never end. Drop the while loop and set the timer to a sensible interval (say 5 seconds).
|
|
|
|
|
Dear Pete,
thanks to you I was able to make the program work. Thanks again for the patience you had with me ...
|
|
|
|
|
You're welcome, and I'm glad that we got there in the end.
|
|
|
|
|
Me too!
|
|
|
|
|
Pete, i'm sorry but i've another question for you: if i want authenticate the access on my ip address, what do i do?
the ipcamera in its home page has the authentication or as a simple user or as a administrator..
if i use HttpWebRequest i do the access with the credentials, but then i can't view the streaming, i think because the authentication executes every time.. have you a solution?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = new NetworkCredential("user", "password");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
|
|
|
|
|
Hi,
Can anyone guide on how to create a binary data file with columns like this using C#:
Customer Account
Customer Name
Expiry Date
....
....
etc
Technology News @ www.JassimRahma.com
|
|
|
|
|
Possibly the easiest way to do this is to store the data in a class that can be serialized, and then use a BinaryFormatter[^] to serialize the file out.
|
|
|
|
|
Binary files don't have columns, just bytes. So you have to make up some sort of format (it can be a trivial format, of course, but it'll be a format).
The simplest format is to just dump everything row by row. That make the number, order and type of the columns part of the format, too. So you can't easily make changes to that.
A slight improvement on that is starting with an int specifying the number of rows, so the reader can pre-allocate instead of having to take a guess and maybe resize.
You might consider putting a version number in it too, it can't really hurt and your later self will probably thank you.
In most cases, it's most convenient to use the BinaryWriter (or BinaryReader for reading) class. Just iterate over the rows, and within a row, iterate over the columns, and write everything to the file.
On the read-side, be careful to read everything as the type it was written as (that's more of a guideline than a rule, sometimes there's a reason to read something as a different type).
At least, that's how I would do it. In my experience, using the built-in serialization leads to
0) bloat in the data file
1) type not being serializable, so you still have to do it manually, and this time the api sucks
2) extreme slowness
3) compatibility trouble between versions of your program even if the data format didn't need to change
In some cases it can be less work.
|
|
|
|
|
The concept of rows/columns in binary files is rubbish, you can't "human" read it anyway. What you need to do is make sure that what you read out can be easily formatted into rows and columns.
You can look here[^]
Probably the easiest way is to add a seperator between values or use location based indexes (byte 1-6 = id, byte 7-8 = category, byte 9-36 = description, ... or whatever columns you have)
The most difficult thing about binary files, I find, is the encoding/decoding.
After having said all this, if you can write to text file, I would recommend that instead...
|
|
|
|
|
I have an issue with a custom gridview. Source code is from the PagingGridView located on this site. I have tried several paging gridivews but keep running into the same problem which leads me to believe that the issue is not related to the gridview, but perhaps viewstate. When I bind the gridview it shows up properly on the page. As I scroll from page to page, it works properly. The problem exists when I get to the last page of records. If the total records in the DataSource is less than the Page size, the gridview binds correctly, however a postback will cause blank rows to show up beneath the correctly bound entries of the gridview. Wierd... I am using LINQ with Entitiy framework to get data from the database. All of this seems to work correctly, its just these blank rows that keep appearing.
Example markup:
<custom:gridview id="SearchResultsGridview" runat="server" showheaderwhenempty="true" onpageindexchanging="SearchResultsGridview_Paging" onselectedindexchanging="SearchResultsGridview_Selection" autogenerateselectbutton="True" allowpaging="true" allowcustompaging="true" pagesize="15" autogeneratecolumns="False" datakeynames="FactoryId,InlineId" cssclass="mGrid" headerstyle-cssclass="hed" alternatingrowstyle-cssclass="alt" pagerstyle-cssclass="pgr" selectedrowstyle-cssclass="sel">
<columns>
<asp:boundfield datafield="InlineId" headertext="Inspection Id">
<asp:boundfield datafield="FactoryId" headertext="" visible="false">
<asp:boundfield datafield="CreateById" headertext="" visible="false">
<asp:boundfield datafield="FactoryName" headertext="Factory Name">
<asp:boundfield datafield="CreateByName" headertext="Created By">
<asp:boundfield datafield="CreateDate" headertext="Date Created">
Example of binding procedure:
protected void SearchResultsGridview_Bind(int PageIndex)
{
var _Fetcher = new InlineInspectionRepository.PageablePermissionRestrictedInlineInspections();
_Fetcher.AccountId = Convert.ToInt32(_Account.AccountId);
_Fetcher.MerchandiseOrganizationId = Convert.ToInt32(MerchandiseOrganizationList.SelectedValue);
_Fetcher.MerchandiseGroupId = Convert.ToInt32(MerchandiseGroupList.SelectedValue);
_Fetcher.MerchandiseDivisionId = Convert.ToInt32(MerchandiseDivisionList.SelectedValue);
_Fetcher.FactoryId = Converter.ConvertToInt32(FactoryIdField.Value);
_Fetcher.OrderNumber = OrderNumberField.Text;
_Fetcher.StyleNumber = StyleNumberField.Text;
_Fetcher.InlineId = Converter.ConvertToInt32(InspectionIdField.Text);
_Fetcher.InspectionStartDate = null;
_Fetcher.InspectionEndDate = null;
_Fetcher.StartPosition = (PageIndex * SearchResultsGridview.PageSize) + 1;
_Fetcher.EndPosition = ((PageIndex * SearchResultsGridview.PageSize) + 1) + (SearchResultsGridview.PageSize - 1);
if (InspectionStartDateField.Text != "") {
_Fetcher.InspectionStartDate = Convert.ToDateTime(InspectionStartDateField.Text);
}
if (InspectionEndDateField.Text != "") {
_Fetcher.InspectionEndDate = Convert.ToDateTime(InspectionEndDateField.Text);
}
SearchResultsGridview.DataSource = _Fetcher.Execute();
SearchResultsGridview.VirtualItemCount = _Fetcher.Count;
SearchResultsGridview.DataBind();
if (SearchResultsGridview.VirtualItemCount == 0)
{
Page_Notify("No inspections were found matching the selected criteria");
}
}
|
|
|
|
|
we need a machine learning program using c#. It doesn't matter is it Neural network or Support vector machine.what we need is to add certain features such as OCR, edge extraction, and colour histogram of an image add as a samples to the machine which is in the web. feature extraction part is already completed. so no need to concern about it. What we really need to consider is train the machine using samples and identify the image extracted features send by the mobile phone to the web service. if the image is a match then return the description related to that sample.
look the link : http://www.facebook.com/photo.php?fbid=10151659537734847&set=a.446681469846.230296.612844846&type=3&theater[^]
|
|
|
|