记录Harde学习成长生活的点点滴滴.

线程间操作无效: 从不是创建控件的线程访问它。

其实很早就想写这么篇文章了,只不过一直很懒再者觉得自己对线程的理解还不够深刻
写出来怕真正的高手笑话。
今天朋友遇到了这个问题,考虑下,还是写出来吧。
错误详细信息应该为:
线程间操作无效: 从不是创建控件“XXX”的线程访问它。

问题看起来其实很简单,解决起来其实也很简单…
就我知道的有三种方法。
在说解决方案前,先了解点相关信息。

引用MSDN上而定话:访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。

而我们出现这个错误时,应该都在做这个操作…
点击我阅读全文 »

2010-03-08 C#


没有评论
66 次浏览

C# params参数

不得不说,这是一个非常好用的参数。
不过在很多初级教材中我并没有看到它的身影
MSDN给出的介绍是
params 关键字可以指定在参数数目可变处采用参数的方法参数。
这么说可能很多人不理解
没有关系
看个例子就知道了
先看下MSDN的例子

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// cs_params.cs
using System;
public class MyClass 
{
 
    public static void UseParams(params int[] list) 
    {
        for (int i = 0 ; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
        Console.WriteLine();
    }
 
    public static void UseParams2(params object[] list) 
    {
        for (int i = 0 ; i < list.Length; i++)
        {
            Console.WriteLine(list[i]);
        }
        Console.WriteLine();
    }
 
    static void Main() 
    {
        UseParams(1, 2, 3);
        UseParams2(1, 'a', "test"); 
 
        // An array of objects can also be passed, as long as
        // the array type matches the method being called.
        int[] myarray = new int[3] {10,11,12};
        UseParams(myarray);
    }
}

上面的代码运行后将会输出
1
2
3

1
a
test

10
11
12

或许大家觉得没什么用
那么举个常用的例子
我们要做删除和批量产出功能
那么会产生Delete(int id)和Delete(int[] ids)这两个方法
但是有了params就大可不必
只要一个Delete(params int[] ids)
就可以了
调用时
删一个就Delete(id)
多个就Delete(ids)
是不是很方便

手机通讯录备份、还原【通用】

写在前面的话:
虽然我打着通用的旗号,但是还是有些要求的
首先在手机的所有地方翻翻 是否有“同步”、“SyncML”、“备份”之类的字样
如果没有,那也没事,再看看你手机是否支持JAVA….
上面两个 只要满足一个 就请继续看吧
如果都不满足,看见右上角的X了么…点吧

好了不废话了…

没有“同步”功能的
直接拖到网页底部….
有的继续往下看

今年二月份,腾讯公司开始提供“同步手机联系人”的功能(也就是SyncML服务)
虽然我的手机自带备份功能、手机套件也有同电脑同步的功能,不过既有就不要浪费了…

首先打开QQ邮箱,没开通的先开通
进入之后点击“设置”–>“体验室”
第一个
开通它
OK,计算机方面告一段落

下面看手机的
点击我阅读全文 »

返回顶部