|
I have 2 classes and I want when the second class raises an event, the first class can catch and do something.
I have heard about using delegate to do this, but I dont know how to do?
Hung
|
|
|
|
|
This[^] is where you should begin. The documentation actually explains things pretty well.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
I am having an issue with ConfigurationSettings.AppSettings in a multi-threaded winforms application. I have an error thrown by the .net framework Config class when both the main thread and worker thread access the AppSettings namevalue collection. Is this a threadsafe issue? I have tried using lock for the AppSettings collection, but this throws the same error. Below is the code to reproduce the error:
private void Form1_Load(object sender, System.EventArgs e)
{
MethodInvoker myInvoker = new MethodInvoker(WorkerThreadFunction);
myInvoker.BeginInvoke(new AsyncCallback(WorkerThreadAsyncCallBack), myInvoker);
NameValueCollection nvc = ConfigurationSettings.AppSettings;
}
private void WorkerThreadFunction()
{
string settingVal = ConfigurationSettings.AppSettings["Setting1"];
}
The following error results:
"Object reference not set to an instance of an object"
Stack Trace:
at System.Configuration.ConfigurationRecord.Evaluate(String configKey)
at System.Configuration.ConfigurationRecord.ResolveConfig(String configKey)
at System.Configuration.ConfigurationRecord.GetConfig(String configKey)
at System.Configuration.DefaultConfigurationSystem.System.Configuration.IConfigurationSystem.GetConfig(String configKey)
at System.Configuration.ConfigurationSettings.GetConfig(String sectionName)
at System.Configuration.ConfigurationSettings.get_AppSettings()
Can anyone shed some light on this issue?
Thanks in advance...
|
|
|
|
|
I want to define a Row as an object:
if my database is:
[Text][Text][OLE OBJECT]
i want to create an row object in my c#application with that structure.
Insert value inside the put in some way in the original Database.
Is it possible with ADO.NET?
|
|
|
|
|
You could write a bunch of code to do that, but ADO.NET does not work that way by itself. It's designed to be disconnected, so you'd need to write all the code to keep connecting and updating values when you set them.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
so are you telling me is it not possible?
Another thing:
If i've to add some Field into a table with the INSERT query, but i have to leave empty someother what is the correct query:
INSER into table mytab ([Name], [Surname], [EYESCOLOR], [IMAGE]) Value ('Mike', 'Tyson', 'Null', 'Null')
or
INSER into table mytab ([Name], [Surname], [EYESCOLOR], [IMAGE]) Value ('Mike', 'Tyson', '', Null)
INSER into table mytab ([Name], [Surname], [EYESCOLOR], [IMAGE]) Value ('Mike', 'Tyson', 'NULL', NULL)
????
|
|
|
|
|
Sasuko wrote: so are you telling me is it not possible?
Not without writing the code, no.
Neither. It's DBNull.Value, I believe.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
I am trying to read image ( binary data type) directly from database. I can read if the image is single ,but if there are multiple images put together( inside one column) , I am not be able to read it. Can you take a look at below code and let me know what I am doing wrong?
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Data.SqlClient;
using System.IO;
using System.Drawing.Imaging;
using System.Collections.Generic;
public partial class GetImage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
const int oleOffset = 78;
const int oleTypeStart = 20;
const int oleTypeLength = 12;
string TransactionId;
string sql;
Bitmap bmp;
byte[] imageBytes;
TransactionId = (string)this.Request.QueryString["TransactionId"];
if (TransactionId == null) return;
TransactionId = int.Parse(TransactionId).ToString();
sql = "Select Image from Image where TransactionId=" + TransactionId;
ConnectionStringSettings cnSetting =
ConfigurationManager.ConnectionStrings["AppConnectionString6"];
using (SqlConnection cn = new SqlConnection(cnSetting.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
dr.Read();
imageBytes = (byte[])dr.GetValue(0);
}
}
}
if (imageBytes == null || imageBytes.Length == 0) return;
MemoryStream tempStream;
string type = System.Text.Encoding.ASCII.GetString(
imageBytes, oleTypeStart, oleTypeLength);
if (type == "Bitmap Image")
{
tempStream = new MemoryStream(
imageBytes, oleOffset, imageBytes.Length - oleOffset);
}
else
{
tempStream = new MemoryStream(
imageBytes, 0, imageBytes.Length);
}
bmp = new Bitmap(tempStream);
// bmp = new Bitmap(bmp, bmp.Height / 3 , bmp.Width / 2);
Response.ContentType = "Image/gif";
bmp.Save(Response.OutputStream, ImageFormat.Gif);
Response.End();
}
private void _GetMultipleImages ()
{
const int oleOffset = 78;
const int oleTypeStart = 20;
const int oleTypeLength = 12;
string TransactionId;
string sql;
byte[] imageBytes;
TransactionId = (string)this.Request.QueryString["TransactionId"];
if (TransactionId == null) return;
TransactionId = int.Parse(TransactionId).ToString();
sql = "Select Image from Image where TransactionId=" + TransactionId;
ConnectionStringSettings cnSetting =
ConfigurationManager.ConnectionStrings["AppConnectionString6"];
using (SqlConnection cn = new SqlConnection(cnSetting.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
dr.Read();
imageBytes = (byte[])dr["Image"];
}
}
}
if (imageBytes == null || imageBytes.Length == 0) return;
ArrayList imgList = new ArrayList();
using (SqlConnection cn = new SqlConnection(cnSetting.ConnectionString))
{
sql = "select FrontImageOffset, FrontImageSize from CDData where TransactionId=" + TransactionId;
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows)
{
if (dr.Read())
{
//
// Make a static copy of the buffer information
//
long imagebytesLen = imageBytes.Length;
List<byte> imgBytes = new List<byte>(imageBytes);
do
{
long offset = (long)dr["FrontImageOffset"];
long length = (long)dr["FrontImageSize"];
//
// Determine if we have enough buffer to read the bytes
//
if (imagebytesLen >= (offset + length))
{
//
// allocate a new buffer for our image and then
// make a copy of it from our image buffer.
//
byte[] newimage = new byte[length];
imgBytes.CopyTo(Convert.ToInt32 (offset), newimage, 0, newimage.Length);
//
// Now add us to our list
//
imgList.Add(newimage);
}
} while (dr.NextResult());
}
}
dr.Close();
}
}
}
//
// Do we have any images?
//
if (imgList.Count > 0)
{
//
// Loop through the list and concatenate all the images
// into one huge image.
//
List<byte> bigImage = new List<byte>();
for (int i = 0; i < imgList.Count; ++i)
{
bigImage.AddRange((byte[])imgList[i]);
}
//
// Create hte bitmap from the buffered data
//
byte[] data = bigImage.ToArray();
MemoryStream tempStream = new MemoryStream(imageBytes);
tempStream.Position = 0;
System.Drawing.Image bmp = System.Drawing.Image.FromStream(tempStream);
// bmp = new Bitmap(bmp, bmp.Height / 3 , bmp.Width / 2);
Response.ContentType = "Image/gif";
bmp.Save(Response.OutputStream, ImageFormat.Gif);
Response.End();
}
}
}
|
|
|
|
|
Standard question #1:
What do you mean by "not working"?
Standard question #2:
What error message do you get?
---
b { font-weight: normal; }
|
|
|
|
|
I am getting an error when try to debug:
System.ArgumentOutOfRangeException was unhandled by user code
Message="Index and count must refer to a location within the buffer.\r\nParameter name: bytes"
Source="mscorlib"
ParamName="bytes"
StackTrace:
at System.Text.ASCIIEncoding.GetString(Byte[] bytes, Int32 byteIndex, Int32 byteCount)
at GetImage.Page_Load(Object sender, EventArgs e) in c:\Documents and Settings\jc\My Documents\Visual Studio 2005\WebSites\CashApp\Cash\GetImage.aspx.cs:line 50
at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
at System.Web.UI.Control.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
|
|
|
|
|
Like the error message says...
tempStream = new MemoryStream(
imageBytes, oleOffset, imageBytes.Length - oleOffset);
I'd say this is wrong. Certainly somewhere you're using values that don't index into the data as they should.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
there are columns called FrontImageOffset, FrontImageSize that tells me where an image's byte stream ends and a new image begins
so, I am using a sql command like below to figure out what I am supposed to looking for..
sql = "select FrontImageOffset, FrontImageSize from CDData where TransactionId=" + TransactionId;
using (SqlCommand cmd = new SqlCommand(sql, cn))
|
|
|
|
|
Well, it's obvious that somewhere you are trying to pass an array index that is outside the bounds of the array. Maybe it's not this line, I didn't look through your code closely.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Here is the revised question.
I have two table: data and image talbe.
Data table
Transactionid documenttype frontimage offset frontimage size
1934318415 CHECK 1 11264
1934318415 COUP 18433 27648
1934318415 COUP 57345 39936
The front/rear offset tell you where the image data in image table begins and the front/rear length tell you how many bytes from the offset to extract to get the image out of the .
Image table..
Image table
Transaction ID, Image
1934318415 <binary>
Below id the logic that I am going to use to retrive the images. Can you help me out writing a code?
//
// Write the logic to retrieve the byte array from the Image table
// … … … …
MemoryStream ImageStream = new MemoryStream (Byte_Array_From_Image_Table);
// You allocate a buffer to hold the image in
Byte[] bytes = new Byte[FrontImageSize + RearImageSize];
int offset = Convert.ToInt32(FrontImageOffset) - 1;
// Move the pointer in your stream to offset position and then read
ImageStream.Seek(offset, SeekOrigin.Begin);
ImageStream.Read(bytes, 0, bytes.Length);
// Create a image object from that buffer
Bitmap bmp = new Bitmap(new MemoryStream(bytes));
// retrive image
-- modified at 16:55 Thursday 12th January, 2006
|
|
|
|
|
Jusah has told me to use double buffering.
But i don't make draw inside the panel i just move it and when i move it flicker.
So how can use double buffer on this?
|
|
|
|
|
By turning on double buffering.
this.SetStyle(ControlStyles.DoubleBuffer, true);
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
You can't use double buffering in this instance except for the containing Form and I don't think that will solve your problem.
I don't know if this applies to the situation, but what kind of hardware do you have in your computer? I just built a mock application such as you describe with a moving panel that simulates scrolling. I put a TrackBar on the form next to the panel to adjust the panel's Top property. I then scrolled the heck out of the picture; on my newest computer, it does not flicker. On an older PC with limited video memory, the image shears as I scroll.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
i get a P4 3,2 ghz with 512mb ram and a Ati radeon 9550
Anyway it continue to flicker and when i move it fliker other unmoved controlls too.
|
|
|
|
|
I don't see that on my implementation. I'm sorry. I wish I could help more.
"we must lose precision to make significant statements about complex systems."
-deKorvin on uncertainty
|
|
|
|
|
thanks anyway
|
|
|
|
|
I have an application that animates a form with a transparent panel, i don't use Double Buffering and i had the same problem you are having. To be quite honest i'm not sure exactly what fixed the problem but here's the method i'm using to set the transparency, hopefully it'll work for you.
private void MakeTransparent()
{
Bitmap bitmap = (Bitmap)pnlBackground.BackgroundImage;
bitmap.MakeTransparent(bitmap.GetPixel(1, 1));
TransparencyKey = BackColor;
WindowState = FormWindowState.Normal;
}
The window starts minimised and then i bring it onto screen from this method which is called in Form_Load, otherwise i get a black border around my form. The panel pnlBackground is docked to the form. I don't do anything special when i'm annimating the form so if this doesn't help then post your code that mvoes your panel and i'll see if i can help.
Cheers
Kev
|
|
|
|
|
Hi,
If at some point in my code, if i re-set the combobox's dataset with a new datasource object, i see that the DisplayMember value gets blank automatically. Any ideas?
|
|
|
|
|
You need to set it again, obviously
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
I know, so i have reset it again, but it still keeps it as blank.
string displayMember = theComboBox.DisplayMember; // Collect the DisplayMember value, because its going to be blank for some reason immediately after re-setting the DataSource.
theComboBox.DataSource = theNewDataSourceObjet;
theComboBox.DisplayMember = displayMember;
Now even though i have re-set the DisplayMember, it is still string.Empty.
Why???????
|
|
|
|
|
The combo box doesn't have a databind method ? the new data source has the same object available as a data source ?
Christian Graus - Microsoft MVP - C++
|
|
|
|