我正在尝试阅读财务数据并存储它.我从商店获得财务数据的地方数据具有令人难以置信的精度,但我只对小数点后的5位数感兴趣.因此,我决定在我创建的Decimal上使用t = .quantize(cdecimal.Decimal('.00001'),rounding = cdecimal.ROUND_UP),但我不断得到InvalidOperation异常.为什么是这样?
>>> import cdecimal
>>> c = cdecimal.getcontext()
>>> c.prec = 5
>>> s = '45.2091000080109'
>>> # s = '0.257585003972054' works!
>>> t = cdecimal.Decimal(s).quantize(cdecimal.Decimal('.00001'), rounding=cdecimal.ROUND_UP)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cdecimal.InvalidOperation: [<class 'cdecimal.InvalidOperation'>]
Run Code Online (Sandbox Code Playgroud)
为什么这里有无效操作?如果我将精度更改为7(或更高),它可以工作.如果我将s设置为'0.257585003972054'而不是原始值,那也可以!到底是怎么回事?
谢谢!
基本上,我想在foreach循环中删除列表中的项目.我知道在使用for循环时这是可能的,但出于其他目的,我想知道使用foreach循环是否可以实现这一点.
在python中,我们可以通过执行以下操作来实现此目的:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in a:
print i
if i == 1:
a.pop(1)
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出
>>>1
3
4
5
6
7
8
9
Run Code Online (Sandbox Code Playgroud)
但是当在c#中做类似的事情时,我得到一个InvalidOperationException,我想知道是否有办法解决这个问题,而不仅仅是使用for循环.
我抛出异常时使用的c#代码:
static void Main(string[] args)
{
List<string> MyList = new List<string>(new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9"});
foreach (string Item in MyList)
{
if (MyList.IndexOf(Item) == 0)
{
MyList.RemoveAt(1);
}
Console.WriteLine(Item);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
我遇到了上述问题很多的问题.我们有一个TCP/IP服务器应用程序,已经运行了好几年.我现在需要允许应用程序接受来自直接连接的USB设备的连接,通过内部使用套接字连接来修补服务器应用程序中的localhost(127.0.0.1).(顺便说一句,我只提到USB来解释我为什么这样做 - 我禁用所有USB功能作为调试此问题的一部分).
沿此套接字的通信可导致在客户端和服务器端调用GUI元素.访问客户端上的GUI元素会导致标题中的错误(下面的调用堆栈).这里的一个关键问题是调试器无法暂停异常:尽管在抛出时将所有异常设置为暂停,但应用程序只是在发生错误时终止.
我的应用程序唯一看起来独一无二的是它使用内部套接字连接到127.0.0.1.我还确认,如果将客户端分成单独的应用程序,该应用程序可以正常工作.但是,出于其他原因,我无法将其用作永久解决方案.
有几篇帖子讨论了我在下面列出的这类问题.不幸的是,在我的案例中似乎没有提供解决方案:
还有其他帖子提出类似的问题:这里,这里和这里.这里也是一个好人.
这是一个代码片段 - 当客户端收到套接字数据时,这会导致ProcessCommandCT内的崩溃:
' Find application main form from any thread
' There is only one instance of 'RibbonForm1' and this is the main form
Public Function GetRibbonForm() As RibbonForm1
Dim rf As RibbonForm1 = Nothing
For Each f As Form In My.Application.OpenForms
rf …
Run Code Online (Sandbox Code Playgroud) .net sockets multithreading invalidoperationexception thread-safety
我为.Net MemoryCache编写了自己的自定义更改监视器类.它似乎初始化很好,但是当我尝试将它添加到Cache时,它会抛出一个InvalidOperation异常"该方法已经被调用,并且只能被调用一次."
我的更改监视器类
internal class MyChangeMonitor : ChangeMonitor
{
private Timer _timer;
private readonly string _uniqueId;
private readonly TypeAsOf _typeAsOf;
private readonly string _tableName;
public GprsChangeMonitor(TypeAsOf typeAsOf, string tableName)
{
bool initComplete = false;
try
{
_typeAsOf = typeAsOf;
_tableName = tableName;
_uniqueId = Guid.NewGuid().ToString();
TimeSpan ts = new TimeSpan(0, 0, 5, 0, 0);
_timer = new Timer {Interval = ts.TotalMilliseconds};
_timer.Elapsed += CheckForChanges;
_timer.Enabled = true;
_timer.Start();
initComplete = true;
}
finally
{
base.InitializationComplete();
if(!initComplete)
Dispose(true);
}
}
void …
Run Code Online (Sandbox Code Playgroud) 我有这个非常,非常奇怪的错误,我从来没有能够确定(它很少发生).基本上,我有一个C#应用程序在退出时随机抛出一个未知的异常.我这次设法在调试器中捕获它,结果是调用Application.Exit()
抛出了System.InvalidOperationException
以下消息:
mscorlib.dll中发生了'System.InvalidOperationException'类型的第一次机会异常
附加信息:收集已修改; 枚举操作可能无法执行.
我不确定这个据称被修改的集合是什么,或者修改它的是谁.
堆栈跟踪不是很有用:
mscorlib.dll!System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()+ 0x13f bytes System.Windows.Forms.dll!System.Windows.Forms.Application.ExitInternal()+ 0x112 bytes System.Windows.Forms.dll!System. Windows.Forms.Application.Exit(System.ComponentModel.CancelEventArgs e)+ 0x65字节
知道如何找出哪些ArrayList已被修改?我不认为这是我正在做的任何事情,更可能是我正在做的一个动作,即在MS没有预料到的操作过程中修改.NET框架的基础状态.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.Sql;
using System.Data.SqlClient;
namespace BissUpdater
{
class Program
{
static void Main(string[] args)
{
string connectionString = "Data Source=H....;
Initial Catalog=LANDesk; Persist Security Info=True;
User ID=Mainstc; Password=xxxxxxxx";
SqlConnection con = new SqlConnection(connectionString);
con.Open();
}
}
}
Run Code Online (Sandbox Code Playgroud)
SQL Connection引发了无效的操作异常.
"无效操作.连接已关闭".
这是我的完整代码.在另一个程序中,它完美无缺.
这是第二次,这不起作用.我正在使用VS2005 ...也许我的程序已损坏?
堆栈跟踪:
在System.Data.SqlClient.SqlConnection.get_ServerVersion()
的System.Data.SqlClient.SqlConnection.GetOpenConnection()处
我认为我的代码应该使ViewBag.test
属性等于"No Match"
,但它会抛出一个InvalidOperationException
.
为什么是这样?
string str = "Hello1,Hello,Hello2";
string another = "Hello5";
string retVal = str.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
.First(p => p.Equals(another));
if (str == another)
{
ViewBag.test = "Match";
}
else
{
ViewBag.test = "No Match"; //this does not happen when it should
}
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码启动一个新进程:
Process p = new Process();
p.StartInfo.FileName = "...";
p.StartInfo.Arguments = "...";
p.Start();
p.WaitForExit(300000); // 5 minutes
if (!p.HasExited)
p.Kill();
Console.Write(p.ExitCode);
Run Code Online (Sandbox Code Playgroud)
当过程在5分钟内结束时,这是有效的,但是当它没有时,我得到了
InvalidOperationException(进程必须在确定请求的信息之前退出...).
知道为什么我得到这个例外吗?
谢谢.
我有一个datagrid,它获取如下数据:
public struct MyData
{
public string name { set; get; }
public string artist { set; get; }
public string location { set; get; }
}
DataGridTextColumn col1 = new DataGridTextColumn();
col4.Binding = new Binding("name");
dataGrid1.Columns.Add(col1);
dataGrid1.Items.Add((new MyData() { name = "Song1", artist = "MyName", location = "loc"}));
dataGrid1.Items.Add((new MyData() { name = "Song2", artist = "MyName", location = "loc2"}));
Run Code Online (Sandbox Code Playgroud)
问题是 - 每当用户尝试编辑单元格或拖动多个单元格时,应用程序都会抛出异常:
System.InvalidOperationException未处理
消息:此视图不允许使用'EditItem'.
为什么是这样?是因为输入数据的方式?
有任何想法吗?
谢谢!
这是创建性能计数器的代码:
var ftpPerfCounter = new PerformanceCounter("FTP Service", "Current Connections", "_Total");
Run Code Online (Sandbox Code Playgroud)
这是异常发生的地方:
int cnt = (int)Math.Round(ftpPerfCounter.NextValue());
Run Code Online (Sandbox Code Playgroud)
这是Exception
消息:
"错误消息:指定类别的计数器布局无效,类型的计数器:AverageCount64,AverageTimer32,CounterMultiTimer,CounterMultiTimerInverse,CounterMultiTimer100Ns,CounterMultiTimer100NsInverse,RawFraction或SampleFraction必须紧跟任何基本计数器类型:AverageBase ,CounterMultiBase,RawBase或SampleBase."
错误消息非常神秘.我不知道如何避免将来发生异常.
细节
这种情况发生在Windows Server 2008 R2 64位操作系统上.FTP服务器是IIS.
c# performancecounter invalidoperationexception iis-7.5 windows-server-2008-r2