|
just log intermediate results and locate the problem. it can't be hard. either the data comes in and doesn't get stored, or it does not come in. use logging, don't trust anything as one of your assumptions or observations is bound to be wrong since you don't agree with the results.
|
|
|
|
|
hi friends $ Seniors,
i am trying to save an image in PNG format, the original image is 24dpi and is 16.2 mb, afterwards i add alpha channel to image and make some portion of the image transperant, after this when i save the image img.save(imagepath, imageformat.png) the size is increased to 33 mb. i wanted to know the image size increased is correct? does the image dpi changed from 24 to 32 increases the image so much?
friends, also debugging my code i found a strange thing, which i would like to share with u
Bitmap bmp = new Bitmap(imagepath);
bmp.save("c:\11.jpg"); // this saved image with 16 mb
Bitmap bmp1 = new Bitmap(bmp);
bmp1.save(c:\\22.jpg); // this saved image with 33 mb
Thanking in Advance
Regards
Samir
|
|
|
|
|
1.
Maybe transparency uses the alpha channel, so now every pixel needs 4 bytes rather than 3?
2.
you should never use Bitmap.Save(string), always use Bitmap.Save(string,ImageFormat).
3.
VCsamir wrote: Bitmap bmp1 = new Bitmap(bmp);
An image may hold metadata, e.g. a camera creating a JPEG file adds a lot of metadata to the pixel data. Copying a bitmap like you do does not copy the metadata.
|
|
|
|
|
hello
I have a DataView and bind it to dataset. for find value in dataview, I use dataview.rowfilter
for Example :
dataview.RowFilter="FirstName like 'D*'";
This will display only those records where the FirstName column begins with D.
If I want to *select* those records where the FirstName column begins with D but still display all the records,
What can I do?
|
|
|
|
|
Hi, you cannot select a row by a DataView. i assume that you have bindet the DataView to a DataGridView Control. In this case, the only method to "select" the rows instead of filter, i know, is my following example.
public partial class Form1 : Form
{
private DataView _dataView;
public Form1()
{
InitializeComponent();
for (int i = 0; i < 10000; i++)
{
dataSet1.Tables[0].Rows.Add("A" + i, "A", "A", "A");
dataSet1.Tables[0].Rows.Add("Ae" + i, "Ae", "Ae", "Ae");
dataSet1.Tables[0].Rows.Add("B" + i, "B", "B", "B");
dataSet1.Tables[0].Rows.Add("Be" + i, "Be", "Be", "Be");
dataSet1.Tables[0].Rows.Add("C" + i, "C", "C", "C");
dataSet1.Tables[0].Rows.Add("D" + i, "D", "D", "D");
dataSet1.Tables[0].Rows.Add("E" + i, "E", "E", "E");
dataSet1.Tables[0].Rows.Add("F" + i, "F", "F", "F");
}
_dataView = new DataView(dataSet1.Tables[0]);
dataGridView1.DataSource = _dataView;
}
public void SelectRowsInView(string filter)
{
Dictionary<string, DataGridViewRow> dataGridViewRows = new Dictionary<string,DataGridViewRow>();
DataRow[] dataRows = _dataView.Table.Select(filter);
foreach (DataGridViewRow dataGridViewRow in dataGridView1.Rows)
{
if (dataGridViewRow.Cells[0].Value != null){
dataGridViewRows.Add(dataGridViewRow.Cells[0].Value.ToString(), dataGridViewRow);
}
}
dataGridView1.ClearSelection();
foreach (DataRow row in dataRows)
{
if ( dataGridViewRows.ContainsKey( row[0].ToString() ) )
{
dataGridViewRows[row[0].ToString()].Selected = true;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
SelectRowsInView("Column1 like 'B*'");
}
}
You have to use the primary key of the DataTable as Dictionary Key, there will be a exception, if you use a not non-ambiguous column as key, in this case, the primary key is index 0.
There a some performance optimizing by using a dictionary, i have desist from comment the source code, you can use the method SelectRowsInView as base idea. I hope i could help
|
|
|
|
|
i have got an eventhandler say evntHnadler , and i want to add another event that should be fired when the "evntHnadler" is fired , but before that i want to check if my second event is already registered with "evntHnadler " or not , any idea how to do it ...
|
|
|
|
|
Message Closed
modified 23-Nov-14 6:24am.
|
|
|
|
|
thanx this is ok for custom created events, but the problem is i'm trying to get the invocationlist from the button1.click, any idea ?
|
|
|
|
|
Hi to all,
How naming controls in C# ?
for example if you have a button for Register , a good name for this button is btnRegister
Button=btn
Label = lbl
TextBox = txt
PictureBox =? and other controls
|
|
|
|
|
|
that would be OK. It is your choice. Or your company's.
|
|
|
|
|
yes,it's true
but i want to find good way for naming controls
|
|
|
|
|
buttonAdd
buttonDelete
labelName
textBoxName
pictureBoxPerson
|
|
|
|
|
Hi Guys,
I have two Question.
1) How does the CLR recognize whether the assembly has been manipulated or not?
2) “The combination of hashing and digital signing allows .NET to protect your assemblies from tampering” –
Explain in steps how this is achieved in dot net.
do u have any ideas?
|
|
|
|
|
How can I use the VS2008 profiler to profile UI Thread ?
When I use it to profile my winform, It recorded only the function executed on the Main threadm and not the UI thread.
Thanks,
Berlus
|
|
|
|
|
I think I've found the problem, the function was inlined, so its name doesn't appear in the performance report.
Does anyone know how to measure such functions ?
Thanks,
Eyal
|
|
|
|
|
Hi everyone, I am having very hardtime manipulating the compact datagrid. I don't know how it is work, but it is not like windows datagridview at all. Can any one please help me how do I load data from a string array to the grid , row and columns wise.
thanks very much in advance.
|
|
|
|
|
This is not a C# question, it's more appropriate in and you've posted in the Mobile Development forum so wait for an answer in there.
|
|
|
|
|
Please look at the code below :
private void button1_Click(object sender, EventArgs e)
{
for (int j = 0; j < 3; j++)
{
i = j;
myCurThread = new Thread(new ThreadStart(myThread));
myCurThread.Start();
myCurThread.Join();
}
}
private void myThread()
{
string result = "";
myComport = new ComPort();
myComport.Device = "COM5";
myComport.BaudRate = 115200;
myComport.HardwareFlowControl = myComport.asFLOWCONTROL_ENABLE;
myComport.DataBits = (short)myComport.asDATABITS_DEFAULT;
myComport.StopBits = (short)myComport.asSTOPBITS_DEFAULT;
myComport.Parity = (short)myComport.asPARITY_DEFAULT;
myComport.ComTimeout = 8000;
myComport.Open();
string strUSSD = "AT+CUSD=1,\"" + "*444#" + "\",15";
myComport.WriteString(strUSSD);
if (myComport.LastError == 0)
{
result = myComport.ReadString();
while(result.IndexOf("Result") == -1)
{
result = myComport.ReadString();
Debug.WriteLine("i = " + i + " " + result);
}
}
myComport.Close();
}
Problem is, Thread.Join make the button "halt". This is understandable since Thread.Join will make main thread wait until the other thread is finish.
How to make so the button will not "halt" and the threads is run on order? (Thread 2 wait until thread 1 finish and so on).
Is there any alternative to Thread.Join?
|
|
|
|
|
The threads were useless this way..
eidt: nvm, I see what you want now. Why not just make 1 thread?
|
|
|
|
|
Thank you harold for the suggestion.
Why not 1 Thread? it's because i need to simulate 3 or more request to thread at almost the same time.
I need the thread to run in order (2nd thread wait until 1st thread finis and so on).
|
|
|
|
|
If you need the threads to run in order, then they are not 'at the same time' but after eachother.
It only helps to make 3 threads then if you want to synchronize the start of thread 2 with the middle of thread 1, so there can be a bit of overlap. If no overlap is allowed you just get this:
[ 1 ][ 2 ][ 3 ]
You might as well do this, it has the same length, but a different thread is doing the work:
[ 1 ][ 1 ][ 1 ]
And that is, of course, the same as:
[ 1 ]
Because a thread is already synchronized with itself.
|
|
|
|
|
Maybe i should explain what i'm trying to do :
I have 4 GSM Modems. 3 Modems for both execute and read the result from AT command and 1 Modem for receive sms from clients.
Clients will send an sms with certain format that can be parse by the application.
Since a GSM Modem can't execute 2 AT command at the same time and also i need the answer from the GSM modem for further process, that's why i need the AT command run by an order.
Clients will send the sms at unpredictable time. There's an event to handle "receive sms".
after an sms received, it will check the sms format. If the format is correct then the thread will be called and run the AT command. The answer from AT command is also unpredictable (sometime fast and sometime it will take a longer time). At the time 1st thread execute AT command, there is new sms came in. the 2nd thread must wait until the 1st thread is finish. And so on.
This is just a small code trying to simulate the situation.
I think Thread.Join is the answer but it will make the UI "halt" (it maybe not a button but a tab page control etc), and that what i'm trying to avoid.
Hope this explanation help understand the problem.
|
|
|
|
|
It's not really clear to me yet, sorry..
|
|
|
|
|
Seems like what you need is a queue object: the SMS-handling thread(s) after processing received messages add their AT command to the queue; the 'AT handler' thread waits on the queue being not-empty and processes the command at the front of the queue.
So - one thread per modem, and one queueing object to coordinate them. Plus the foreground thread that your UI operates on.
Just remember to lock the queue object before any operations that touch it since it is being touched by multiple threads.
|
|
|
|
|