|
for loop is faster than Linq ?
In other occasions , the for loop was very slower than Linq
|
|
|
|
|
desanti wrote: In other occasions , the for loop was very slower than Linq Measured by you on a timer?
One is a simple loop, the other a call to an interface to return an object on each iteration. Which of the two do you think would be faster?
Also, instead of having a list, this would probably be done faster by casting the int to a string when you need it, instead of having it in memory in a non-array.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Hi,
Wonder if there's a better approach to fill a Treeview recursively. Following snippet fills the Treeview but if I need an extra level I'd have to create yet another Sub. There must be a way of doing it recursively? Also I'm not able to show CategoryName on every node (please see tree representations below):
IdCategory CategoryName ParentCategory
15 Uncategorized 0
50 Animals 0
51 Plants 0
52 Dogs 50
53 Small 52
54 Medium 52
55 Large 52
56 Trees 51
57 Flowers 51
58 White 55
59 Brown 55
I call FillRootLevel and get the following:
0
Animals
Plants
Uncategorized
50
Dogs
51
Flowers
Trees
52
Large
Medium
Small
55
Brown
White
Private Sub FillRootLevel()
tvCategories.Nodes.Clear()
dtCategories = obj.ListCategories().Tables("Data")
For Each dr As DataRow In dtCategories.Rows
Dim node As New TreeNode With {
.Text = dr("IdCategory"),
.Tag = dr("CategoryName")
}
tvCategories.Nodes.Add(node)
FillParentCategories(node.Tag, node)
Next
End Sub
Private Sub FillParentCategories(ByVal strNodeTag As String, ByVal parentnode As TreeNode)
dtParentCategories = obj.ListParentCompanies().Tables("Data")
For Each dr As DataRow In dtParentCategories.Rows
Dim node As New TreeNode With {
.Text = dr("ParentCategory"),
.Tag = dr("ParentCategory")
}
parentnode.Nodes.Add(node)
FillCategories(node.Tag, node)
Next
End Sub
Private Sub FillCategories(ByVal strParentCategory As String, ByVal parentnode As TreeNode)
dtCategories = obj.ListCategories(strParentCategory).Tables("Datos")
For Each dr As DataRow In dtCategories.Rows
Dim node As New TreeNode With {
.Text = dr("CategoryName"),
.Tag = dr("CategoryName")
}
parentnode.Nodes.Add(node)
Next
End Sub
I'd need:
Uncategorized
Animals
Dogs
Large
Brown
White
Medium
Small
Plants
Flowers
Trees
Searched quite a bit for a solution but couldn't find a VB.NET / C# acceptable one.
Thanks for any help you may provide!
Sergio
modified 7-Dec-18 18:33pm.
|
|
|
|
|
When you create a node, name it using the value of "IdCategory". When reading the next item, take parentId, and search the entire treeview for a node that has that name as its Id. (FindNode or similar would do, without having to use recursion).
If it exists, add the current item as a child to that node.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Something like below would work
Public Class Form1
Public Class Thingy
Sub New(id As Long, catName As String, parentId As Long)
IdCategory = id
CategoryName = catName
ParentCategory = parentId
End Sub
Public IdCategory As Long
Public CategoryName As String
Public ParentCategory As Long
End Class
Sub New()
InitializeComponent()
Dim data As List(Of Thingy) = New List(Of Thingy)
data.Add(New Thingy(15, "Uncategorized", 0))
data.Add(New Thingy(50, "Animals", 0))
data.Add(New Thingy(51, "Plants", 0))
data.Add(New Thingy(52, "Dogs", 50))
data.Add(New Thingy(53, "Small", 52))
data.Add(New Thingy(54, "Medium", 52))
data.Add(New Thingy(55, "Large", 52))
data.Add(New Thingy(56, "Trees", 51))
data.Add(New Thingy(57, "Flowers", 51))
data.Add(New Thingy(58, "White", 55))
data.Add(New Thingy(59, "Brown", 55))
Dim tv As New TreeView
tv.Dock = DockStyle.Fill
Me.Controls.Add(tv)
For Each item As Thingy In data
Dim possibleParent As TreeNode() = tv.Nodes.Find(item.ParentCategory, searchAllChildren:=True)
If possibleParent.Count = 0 Then
tv.Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
Else
possibleParent.First().Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
End If
Next
End Sub
End Class
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Thanks so much Eddy, looks a lot easier that I would ever thought of. Great answer.
Regards,
Sergio
|
|
|
|
|
Thank you for making me a bit happier, and you're welcome
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Hi Eddie,
Realized I need to add an extra level to the tree. Changed your code to add the ShopName to the list of Thingy. Did a For Each to add all shop names to the tree as a first stage (there's only a max of 10 anyway).
I then tried to first filter the tree by ShopName to then add the nodes according to your code, but I can't seem to figure it out. I think possibleParent tv.Nodes.Find is not taking into account my possibleShop tv.nodes.find ?
Would you have any suggestions on this one ?
Dank U Wel
Dim data As List(Of Thingy) = New List(Of Thingy) From {
New Thingy("SHOP 1", 15, "Uncategorized", 0),
New Thingy("SHOP 1", 50, "Animals", 0),
New Thingy("SHOP 1", 51, "Plants", 0),
New Thingy("SHOP 1", 52, "Dogs", 50),
New Thingy("SHOP 1", 53, "Small", 52),
New Thingy("SHOP 1", 54, "Medium", 52),
New Thingy("SHOP 1", 55, "Large", 52),
New Thingy("SHOP 1", 56, "Trees", 51),
New Thingy("SHOP 1", 57, "Flowers", 51),
New Thingy("SHOP 1", 58, "White", 55),
New Thingy("SHOP 1", 59, "Brown", 55),
New Thingy("SHOP 2", 15, "Uncategorized", 0),
New Thingy("SHOP 2", 50, "Animals", 0),
New Thingy("SHOP 2", 51, "Plants", 0),
New Thingy("SHOP 2", 52, "Dogs", 50),
New Thingy("SHOP 2", 53, "Small", 52),
New Thingy("SHOP 2", 54, "Medium", 52),
New Thingy("SHOP 2", 55, "Large", 52),
New Thingy("SHOP 2", 56, "Trees", 51),
New Thingy("SHOP 2", 57, "Flowers", 51),
New Thingy("SHOP 2", 58, "White", 55),
New Thingy("SHOP 2", 59, "Brown", 55)
}
For Each item As Thingy In data
Dim possibleShop As TreeNode() = tv.Nodes.Find(item.ShopName, searchAllChildren:=True)
If possibleShop.Count = 0 Then
tv.Nodes.Add(key:=item.ShopName, text:=item.ShopName)
End If
Next
For Each item As Thingy In data
Dim possibleShop As TreeNode() = tv.Nodes.Find(item.ShopName, searchAllChildren:=True)
If possibleShop.Count > 0 Then
Dim possibleParent As TreeNode() = tv.Nodes.Find(item.ParentCategory, searchAllChildren:=True)
If possibleParent.Count = 0 Then
tv.Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
Else
possibleParent.First().Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
End If
End If
Next
|
|
|
|
|
You could add a level without changing the code; all that needs changing is the data (assuming you are still reading it from a DB as a table, instead of a hard-coded list I'm using for explanation)
Dim data As List(Of Thingy) = New List(Of Thingy)
data.Add(New Thingy(1, "Shop 1", 0))
data.Add(New Thingy(2, "Shop 2", 0))
data.Add(New Thingy(11, "Uncategorized", 1))
data.Add(New Thingy(21, "Uncategorized", 2))
data.Add(New Thingy(12, "Animals", 1))
data.Add(New Thingy(22, "Animals", 2))
data.Add(New Thingy(13, "Plants", 1))
data.Add(New Thingy(23, "Plants", 2))
data.Add(New Thingy(222, "Dogs", 22))
data.Add(New Thingy(2221, "Small", 222))
data.Add(New Thingy(2222, "Medium", 222))
data.Add(New Thingy(2223, "Large", 222))
data.Add(New Thingy(131, "Trees", 13))
data.Add(New Thingy(132, "Flowers", 13))
data.Add(New Thingy(1321, "White", 132))
data.Add(New Thingy(1322, "Brown", 132))
data.Add(New Thingy(232, "Flowers", 23))
data.Add(New Thingy(2321, "White", 232))
data.Add(New Thingy(2322, "Brown", 232))
If you want to add another level, just give it a new number and decide who is going to be the parent-item.
For example, if the White flowers would be divided into thorny and non-thorny, we'd add numbers similar to below;
data.Add(New Thingy(23211, "Thorny", 2321))
data.Add(New Thingy(23212, "Non-thorny", 2321))
Graag gedaan
PS: you don't have to use the numbering-scheme like I did - as long as each item in the tree has a unique number, everything should work. So, numbering them 1,2,3,4,5 etc doesn't change it. Feel free to use a more friendly numbering
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Hey Eddie,
You actually didn't add another level to the data. I have 4 elements:
New Thingy("SHOP 1", 55, "Large", 52)
We're pretty close with the code below but there must be something wrong with the statement after the only ELSE. I'm getting:
Shops
---Shop1
------Uncategorized
------Animals
------Plants
...
---Shop2
------Uncategorized
------Animals
------Plants
...
ie it
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim data As List(Of Thingy) = New List(Of Thingy) From {
New Thingy("SHOP 1", 15, "Uncategorized", 0),
New Thingy("SHOP 1", 50, "Animals", 0),
New Thingy("SHOP 1", 51, "Plants", 0),
New Thingy("SHOP 1", 52, "Dogs", 50),
New Thingy("SHOP 1", 53, "Small", 52),
New Thingy("SHOP 1", 54, "Medium", 52),
New Thingy("SHOP 1", 55, "Large", 52),
New Thingy("SHOP 1", 56, "Trees", 51),
New Thingy("SHOP 1", 57, "Flowers", 51),
New Thingy("SHOP 1", 58, "White", 55),
New Thingy("SHOP 1", 59, "Brown", 55),
New Thingy("SHOP 2", 15, "Uncategorized", 0),
New Thingy("SHOP 2", 50, "Animals", 0),
New Thingy("SHOP 2", 51, "Plants", 0),
New Thingy("SHOP 2", 52, "Dogs", 50),
New Thingy("SHOP 2", 53, "Small", 52),
New Thingy("SHOP 2", 54, "Medium", 52),
New Thingy("SHOP 2", 55, "Large", 52),
New Thingy("SHOP 2", 56, "Trees", 51),
New Thingy("SHOP 2", 57, "Flowers", 51),
New Thingy("SHOP 2", 58, "White", 55),
New Thingy("SHOP 2", 59, "Brown", 55)
}
tv.Nodes.Add("Shops", "Shops")
For Each item As Thingy In data
Dim possibleRoot As TreeNode() = tv.Nodes.Find(item.ShopName, searchAllChildren:=True)
If possibleRoot.Count = 0 Then
tv.Nodes(0).Nodes.Add(key:=item.ShopName, text:=item.ShopName)
End If
Next
For Each item As Thingy In data
Dim possibleParent As TreeNode() = tv.Nodes.Find(item.ShopName, searchAllChildren:=True)
If possibleParent.Count = 0 Then
tv.Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
Else
possibleParent.First().Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
End If
Next
tv.ExpandAll()
End Sub
And the class is now:
Public Class Thingy
Sub New(ShpName As String, id As Long, catName As String, parentId As Long)
ShopName = ShpName
IdCategory = id
CategoryName = catName
ParentCategory = parentId
End Sub
Public Property ShopName As String
Public Property IdCategory As Long
Public Property CategoryName As String
Public Property ParentCategory As Long
End Class
Ik zit vast met deze boom. Heel erg bedankt voor al je hulp
Sergio
|
|
|
|
|
sterenas wrote: You actually didn't add another level to the data. AFAIK, I did; using the same code, we can also easily add the rootlevel called "shops", if you want the tree to start there. Simply take the code with the changes I proposed, and add the code below;
Dim data As List(Of Thingy) = New List(Of Thingy)
data.Add(New Thingy(99999, "Shops", 0))
data.Add(New Thingy(1, "Shop 1", 99999))
data.Add(New Thingy(2, "Shop 2", 99999))
The tree will then have a single branch called shops, with a list of shops under that node, and categories of stuff to sell within that. I used a higher number for the lowest level to show that the numbers are only used to "link" the nodes together - the number in itself is meaningless.
sterenas wrote: Public Class Thingy I've used the thingy-class as a placeholder for the data; they're just nodes. When adding a level, all we need is three things:
* the Id of the node (what the treenode is called)
* the Id of the node that we're going display this one in (the parent node)
* a name to display (which does not have to be limited to categories)
If any node is clicked, you can traverse the tree to see which shop it belongs to.
sterenas wrote: About to give up on this treeview and use a datagridview which is far simpler to understand The choice between TreeView and GridView is determined by the data; if it is a tree, you use a tree, if it is a grid, you use the gridview. We don't do grids in trees or trees in grids, because that becomes complicated quickly.
Complicated code is frustrating, which leads to anger, which leads to the dark side.
sterenas wrote: Ik zit vast met deze boom. Heel erg bedankt voor al je hulp No problem, we all been stuck at some point
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Great explanation Eddie, you nailed it! Enclosing the working code just in case someone else is as stuck as I was. You only need to add a treeview named tv to Form1.
Again thanks so much for your time and help and Heb een geweldige dag in zo'n mooi land.
Sergio
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim data As List(Of Thingy) = New List(Of Thingy) From {
New Thingy(99999, "Shops", 0),
New Thingy(1, "Shop 1", 99999),
New Thingy(2, "Shop 2", 99999),
New Thingy(15, "Uncategorized", 1),
New Thingy(15, "Uncategorized", 2),
New Thingy(50, "Animals", 1),
New Thingy(51, "Plants", 1),
New Thingy(52, "Dogs", 50),
New Thingy(53, "Small", 52),
New Thingy(54, "Medium", 52),
New Thingy(55, "Large", 52),
New Thingy(56, "Trees", 51),
New Thingy(57, "Flowers", 51),
New Thingy(58, "White", 55),
New Thingy(59, "Brown", 55)
}
For Each item As Thingy In data
Dim possibleParent As TreeNode() = tv.Nodes.Find(item.ParentCategory, searchAllChildren:=True)
If possibleParent.Count = 0 Then
tv.Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
Else
possibleParent.First().Nodes.Add(key:=item.IdCategory, text:=item.CategoryName)
End If
Next
tv.ExpandAll()
End Sub
End Class
Public Class Thingy
Sub New(id As Long, catName As String, parentId As Long)
IdCategory = id
CategoryName = catName
ParentCategory = parentId
End Sub
Public IdCategory As Long
Public CategoryName As String
Public ParentCategory As Long
End Class
|
|
|
|
|
Thanks; btw, you might consider giving the thingy a better name
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Hello !
I'm using Entity Framework 6
I have Myobject1 : Name , City , Price, Value
I want to group all the items on groups that have the same Name , city and Price.
After I want to count the groups that have more than 1 item.
I'm using this code :
Dim q As Integer = context.myobjects.GroupBy(Function(x) New With {x.Name,x.City,x.Price}).Where(Function(t3) t3.Count > 1).Count
But this query always return 0
But on my table I have several groups that have more than 1 item.
What is wrong with my query ?
Thank you !
|
|
|
|
|
That code looks like it should work. Are you sure you're connecting to the right database?
What happens if you run the generated query directly within SQL? You can see the query with:
Dim query As String = context.myobjects.GroupBy(Function(x) New With {x.Name,x.City,x.Price}).Where(Function(t3) t3.Count > 1).ToString()
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Hello !
i'm using vb.net 2017 with EF 6
I have 2 tables on my database : Product and ProductDetail
I have also 2 bindingsource Productbindingsource and ProductDetailsbindingsource.
I have also 2 datagridview each of them bound to the respective bindingsource.
When the user select a product in the first datagridview , the other datagridview is filled with Productdetails for the selected product.
I have this code :
Private sub Fill_Product
context.Products.Where(Function(t2) t2.cl>5).Load
ProductBindingsource.datasource=context.Products.Local.ToBindinglist
End sub
Private Sub ProductBindingSource_CurrentChanged(sender As Object, e As EventArgs) Handles ProductBindingSource.CurrentChanged
context.Entry(ProductBindingSource.Current).Collection("ProductDetails").Load()
ProductDetailsBindingsource.Datasource=DirectCast(ProductBindingSource.Current, Product).ProductDetails
End sub
Private Sub RollBack()
Dim changedEntries = context.ChangeTracker.Entries().Where(Function(x) x.State <> EntityState.Unchanged).ToList()
For Each entry In changedEntries
Select Case entry.State
Case EntityState.Modified
entry.CurrentValues.SetValues(entry.OriginalValues)
entry.State = EntityState.Unchanged
Case EntityState.Added
entry.State = EntityState.Detached
Case EntityState.Deleted
entry.State = EntityState.Unchanged
End Select
Next
End Sub
I have 2 problems with this code :
1.when I delete a ProductDetail from the second Grid , and after execute the rollback Sub , the deleted ProductDetail is not back on that datagrid , andalso when I add new Productdetail when I rollback this is not removed from the gridview.( other modifications in values , are reverted to original values).
2.On the sub ProductBindingSource_CurrentChanged , everytime that the user select a product in the first grid , the second grid is filled with ProductDetails and database is queried with .Load. But this is ok when the user select a Product for the first time . What about when the user select a Product for the second or third time ? The product Details are already loaded , so what to do to not query again from database but use local data ?
Thank you !
modified 6-Dec-18 7:17am.
|
|
|
|
|
The drawlines feature does not work correctly in the following codes. but it works correctly when the same data is drawn with the drawline. Drawlines draws lines that are not real. What are your comments?
Dim uImage As Bitmap = New Bitmap(PictureBox1.Size.Width, PictureBox1.Size.Height, 4, Imaging.PixelFormat.Format32bppPArgb, 0)
Dim Grafik As Graphics = Graphics.FromImage(uImage)
Grafik.Clear(Color.Black)
Dim Offset As Integer = 0
Dim Gain As Integer = 1
Dim Freq As Integer = 1
Dim N As Integer = PictureBox1.Size.Width
Dim D(N - 1) as PointF
For i As Integer = 0 To N - 1
D(i).X = i
D(i).Y = Offset + Gain * Math.Cos(i * Freq * Math.PI / 180.0)
Next
Dim sx As Double = PictureBox1.Size.Width / (N - 1)
Dim sy As Double = PictureBox1.Size.Height * 0.5
sy=sy*32000
For i As Integer = 0 To N - 1
D(i).X = D(i).X * sx
D(i).Y = PictureBox1.Size.Height * 0.5 - D(i).Y * sy
Next
Grafik.DrawLines(New Pen(Color.Blue), D)
For i As Integer = 1 To N - 1
Grafik.DrawLine(New Pen(Color.Red), D(i - 1), D(i))
Next
PictureBox1.Image = Nothing
PictureBox1.Image = uImage
Grafik.Dispose()
I would like to provide additional information. Errors may occur when Picturebox reaches a specific size. The dimensions for this example are 720; 530 pixels. the following image is being obtained:
Blue lines should not appear in the image. Should overlap with the red lines.
https://i.hizliresim.com/MVXM2g.png[^]
|
|
|
|
|
When I try to open the picture it says "403, forbidden". Have you ever heard of the phrase "SELECT is not broken"?
Have the program print the values that you calculate, there might be a rounding error somewhere.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Option Explicit
Sub Button4_Click()
Dim rng As Range
Dim temp As Variant
Dim i As Long
Dim a As Long
Dim rng_dest As Range
Application.ScreenUpdating = False
i = 1
Set rng_dest = Sheets("Invoice data").Range("C:H")
' Find first empty row in columns D:G on sheet Invoice data
Do Until WorksheetFunction.CountA(rng_dest.Rows(i)) = 0
i = i + 1
Loop
'Copy range B16:I38 on sheet Invoice to Variant array
Set rng = Sheets("Invoice").Range("A22:C33")
' Copy rows containing values to sheet Invoice data
For a = 1 To rng.Rows.Count
If WorksheetFunction.CountA(rng.Rows(a)) <> 0 Then
rng_dest.Rows(i).Value = rng.Rows(a).Value
'Copy Invoice number
Sheets("Invoice data").Range("A" & i).Value = Sheets("Invoice").Range("J8").Value
'Copy Date
Sheets("Invoice data").Range("B" & i).Value = Sheets("Invoice").Range("J7").Value
'Copy Company name
Sheets("Invoice data").Range("C" & i).Value = Sheets("Invoice").Range("C13").Value
i = i + 1
End If
Next a
Application.ScreenUpdating = True
Range("J8").Value = Range("J8").Value + 1
'Sheets("Invoice").Range("Invoicebody").Clear
'ActiveSheet.Range("J8").Value = ActiveSheet.Range("J8").Value + 1
End Sub
Sub Macro1()
'
' Macro1 Macro
'
'
Range("E19").Select
Selection.Copy
Sheets("Invoice data").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
result here
Invoice No. Date Customer Category Product Description Quantity Unit Price Amount
1/15/1900 12/4/2018 Kashif GDFItems 214, 421 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDAItems Honda 2036 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GeneralItems Injector Cleaner STP Diesel #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDFItems 214, 421 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDFItems 471 - 215 - 433 - 206 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDFItems 471 - 215 - 433 - 206 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDOItems Fiat Tractor 508 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDFItems 214, 421 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDFItems 221 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDOItems 1 C toyota 412 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GDOItems 1 C toyota 412 #N/A #N/A #N/A
1/15/1900 12/4/2018 Kashif GeneralItems Injector Cleaner STP Petrol #N/A #N/A #N/A
from this invoice
INVOICE
1
Your Complete Adress
------ CUSTOMER ID SEFS
------ INVOICE DATE December 4, 2018
PHONE : 000-0000000 INVOICE NUMBER 16
FAX: 000-0000000 PAYMENT DATE BY December 19, 2018
BILL TO
NAME Kashif
CONPONEY NAME
ADDRESS
PHONE : 000-0000000
EMAIL ID abc@example.com
Category Product Description Quentity Unit Price Amount
GDFItems 214, 421 4 Rs. 5.00 Rs 20.00
GDAItems Honda 2036 2 Rs. 6.00 Rs 12.00
GeneralItems Injector Cleaner STP Diesel 3 Rs. 5.00 Rs 15.00
GDFItems 214, 421 3 Rs. 5.00 Rs 15.00
GDFItems 471 - 215 - 433 - 206 3 Rs. 5.00 Rs 15.00
GDFItems 471 - 215 - 433 - 206 3 Rs. 5.00 Rs 15.00
GDOItems Fiat Tractor 508 4 Rs. 5.00 Rs 20.00
GDFItems 214, 421 3 Rs. 5.00 Rs 15.00
GDFItems 221 3 Rs. 2.00 Rs 6.00
GDOItems 1 C toyota 412 2 Rs. 5.00 Rs 10.00
GDOItems 1 C toyota 412 3 Rs. 3.00 Rs 9.00
GeneralItems Injector Cleaner STP Petrol 3 Rs. 6.00 Rs 18.00
SPECIAL INSTRECTIONS SUBTOTAL Rs. 33,288.00
1. Please mention ur invoice number in cheque. TAX [% ] 2
2. Last date to deposit your due ammount by 15 days of invoice . TAX AMOUNT Rs. 665.76
DISCOUNT Rs. 222.00
TOTAL Rs. 33,731.76
WITHOUT TAX Rs. 33,066.00
Customer Signature Signature
make sure your cheque is payable to deep
For any inquiry you can contact us : abc@email.com
Thanks for your business
|
|
|
|
|
Did you forget to include the question in your post?
|
|
|
|
|
Hello !
I have an application on vb.net 2017 , that reads from excel and save to database.
When I process large data from excel , at some point the application stop , and inside visual studio I get this error :
Managed Debugging Assistant 'ContextSwitchDeadlock' : 'The CLR has been unable to transition from COM context 0x1b387fb0 to COM context 0x1b387e88 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.'
If I press Continue inside visual studio , the program continue to execute and finish the job without error.
But every time I have repeated the proces i get that error .
What can I do ?
Thank you !
|
|
|
|
|
desanti wrote: What can I do ? Offer smaller files.
It's the same with any application in Windows; if it doesn't respond, it is assumed to be dead. If an application does so, Windows will offer to terminate the application.
Or disable the break in the IDE, saving you from having to press F5.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
sorry , but my application does respond and it's not dead.
until the point that this error is displayed , all the data are saved on database .
1 second before this error is displayed , a record was saved on database.
But suddenly this error appear , and I have to press continue , and after the execution goes without problem until the end.
so , the application is alive , why windows consider it to be dead ?
|
|
|
|
|
desanti wrote: sorry , but my application does respond and it's not dead.
until the point that this error is displayed , all the data are saved on database .
1 second before this error is displayed , a record was saved on database.
But suddenly this error appear , and I have to press continue , and after the execution goes without problem until the end.
so , the application is alive , why windows consider it to be dead ?
It says literally so in the error; "The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages."
If the app does not process messages, it is considered "not responding". Most apps that go into an uncontrolled loop do not respond to those messages, and it is a way of detecting if the app is still active. If it is doing a lot in one thread, then the thread won't be replying to messages.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
And what you propose as a solution , because I've read that I should use a background worker , but the problem is that I need to access the UI objects during the process and this is not possible on a background worker.
|
|
|
|
|