我有一个奇怪的问题。我首先显示出现在sortLIST函数中的错误,这似乎很奇怪。如在调试错误中看到的,字符串“ i”出现问题,以“,”分隔。 第一个参数是0.48,它是一个两倍。无论如何,错误提示:
输入字符串的格式不正确
我也尝试过删除CultureInfo(“ en-Us”)行,但没有成功:
现在我已经尝试模拟上述内容,并在按钮控件中执行此代码,在这里它确实起作用并且没有错误:
private void button1_Click(object sender, EventArgs e)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
String i = "0.48,trx/btc,coss,hitbtc2,0.0000062000 / 0.0000066000,0.0000061502 / 0.0000061701,,0.48%";
double test = double.Parse(i.Split(',')[0]);
MessageBox.Show(test.ToString());
}
什么会导致此错误?为了安全起见,我将以下行放在应用程序的所有功能中:
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("en-US");
答案 0 :(得分:4)
您上传的图像显示您实际上正在运行多个线程,但是仅针对当前线程设置区域性。
要解决此问题,您可以将所需的区域性分配给变量,然后在Task.Factory.StartNew
中使用它。您可以执行以下操作:
var culture = new System.Globalization.CultureInfo("en-US");
return Task.Factory.StartNew(() =>
{
// use culture here
Thread.CurrentThread.CurrentCulture = culture;
// your actual code here
String i = "0.48,trx/btc,coss,hitbtc2,0.0000062000 / 0.0000066000,0.0000061502 / 0.0000061701,,0.48%";
double test = double.Parse(i.Split(',')[0]);
});
正如@madreflection指出的那样,您可以将所需的区域性传递给double.Parse()
方法:
// put this at the top of your file
var culture = new System.Globalization.CultureInfo("en-US");
// use this inside Task.Factory.StartNew
double test = double.Parse(i.Split(',')[0], culture);
或者甚至在CultureInfo.InvariantCulture
内使用Task.Factory
(感谢@Olivier):
double test = double.Parse(i.Split(',')[0], CultureInfo.InvariantCulture);