小编Kor*_*tak的帖子

如何通过HTTP安全地发送密码?

如果在登录屏幕上用户使用其用户名和密码提交表单,则密码将以纯文本形式发送(即使使用POST,如果我错了也请更正).

那么问题是,保护用户及其密码的正确方法是针对可能正在窃听通信数据的第三方?

我知道HTTPS是问题的解决方案,但有没有办法确保使用标准HTTP协议(POST请求)至少某种程度的安全性?(也许以某种方式使用javascript)

编辑 我可能遗漏了一些重要的事情.

我的目的是一个页面 - 这是PHP生成的登录页面,当然,它作为HTML文件在HTTP GET请求中发送给用户.服务器和客户端之间没有建立(@Jeremy Powel)连接,所以我无法创建这样的握手协议.我希望整个过程对用户透明 - 他想提交密码,而不是处理加密.

谢谢.

security encryption passwords http plaintext

111
推荐指数
5
解决办法
11万
查看次数

如何以编程方式设置图像源

当Image的Source属性按以下方式设置时,图片取自/Images/down.png.

我如何以编程方式执行相同的操作?

<Image x:Name="myImg" Source="/MyProject;component/Images/down.png" />
Run Code Online (Sandbox Code Playgroud)

以下操作无效,因为Image.Source属性不是字符串类型.

myImg.Source = "/MyProject;component/Images/down.png"; 
Run Code Online (Sandbox Code Playgroud)

c# silverlight image code-behind

35
推荐指数
3
解决办法
12万
查看次数

在定时器的回调方法中抛出异常

我无法在任何地方找到这个问题的答案......

System.Threading.Timer的回调方法(或在System.Timers.Timer的事件处理程序中)抛出的异常会发生什么.异常是否传播到创建计时器的线程或异常丢失?

在计时器的回调函数中抛出异常有什么副作用?

什么是向计时器的创建线程发信号通知工作线程(回调方法)中的异常被抛出的正确方法?

谢谢你的时间.

c# multithreading exception timer backgroundworker

32
推荐指数
1
解决办法
1万
查看次数

即使Dock属性设置,也可以强制执行保证金?

我有一个WinForms Form,上面有一些控件.所有这些都是GrouBox控件,我希望它们堆叠,并在它们之间设置垂直边距.我已将Dock属性设置为Top并将它们堆叠好,但忽略了边距(控件尽可能彼此接近).

这些利润率能否以某种方式得到执行?基本上,它会计算常规停靠位置(就好像边距为0)然后应用保证金.这样的事情可能吗?

我已经试过这样做的另一种方法是使用FlowLayoutPanelTopDown选择.但是,我需要手动设置大小和左/右锚点.

有没有简单的方法来完成这个场景,还是我应该坚持我已经拥有的东西?

controls margin dock groupbox winforms

32
推荐指数
3
解决办法
3万
查看次数

C#Linq-to-Sql - 应该使用IDisposable处理DataContext

我有几种处理DB的方法,所有这些方法都是从调用开始的

FaierDbDataContext db = new FaierDbDataContext();
Run Code Online (Sandbox Code Playgroud)

由于Linq2Sql DataContext对象实现了IDisposable,它是否应该与"using"一起使用?

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}
Run Code Online (Sandbox Code Playgroud)

以这种或那种方式使用它有什么含义?

datacontext idisposable linq-to-sql

27
推荐指数
1
解决办法
1万
查看次数

正确的方式来配置Image/Bitmap和PictureBox

我正在尝试开发Windows Mobile 6(在WF/C#中)应用程序.只有一个表单,表单上只有一个PictureBox对象.在它上面我绘制所有想要的控件或我想要的任何东西.

我正在做两件事.绘制自定义形状并从.png文件加载位图.

下一行在加载时锁定文件(这是一种不受欢迎的情况):

Bitmap bmp = new Bitmap("file.png");
Run Code Online (Sandbox Code Playgroud)

所以我使用另一种方式加载位图.

public static Bitmap LoadBitmap(string path) {
    using (Bitmap original = new Bitmap(path))
    {
        return new Bitmap(original);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我想要慢得多,但我不知道有什么更好的方法来加载图像,同时快速释放文件锁.

现在,在绘制图像时,我使用的方法是:

public void Draw() {
    Bitmap bmp = new Bitmap(240,320);
    Graphics g = Graphics.FromImage(bmp);

    // draw something with Graphics here.
    g.Clear(Color.Black);
    g.DrawImage(Images.CloseIcon, 16, 48);
    g.DrawImage(Images.RefreshIcon, 46, 48);
    g.FillRectangle(new SolidBrush(Color.Black), 0, 100, 240, 103);

    pictureBox.Image = bmp; 
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎是某种内存泄漏.如果我继续这么做,应用程序最终会崩溃.

因此,我有3个问题:

1.)在不锁定文件的情况下从文件加载位图的更好方法是什么?

2.)需要在Draw()函数中手动处理哪些对象(以及以何种顺序),因此没有内存泄漏且没有抛出ObjectDisposedException?

3.)如果pictureBox.Image设置为bmp,就像代码的最后一行一样,pictureBox.Image.Dispose()只会处理与维护pictureBox.Image或底层Bitmap相关的资源吗?

c# graphics dispose image picturebox

23
推荐指数
2
解决办法
6万
查看次数

在其回调方法中停止计时器

我有一个System.Threading.Timer,每10毫秒调用一次适当的事件处理程序(回调).该方法本身不是可重入的,有时可能会超过10毫秒.因此,我想在方法执行期间停止计时器.

码:

private Timer _creatorTimer;

// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
      _creatorTimer = new Timer(CreatorLoop, null, 0, 10);

      // some other code that worker is doing while the timer is active
      // ...
      // ...
}

private void CreatorLoop(object state) {
      // Stop timer (prevent reentering)
      _creatorTimer.Change(Timeout.Infinite, 0);

      /*
          ... Work here
      */

      // Reenable timer
      _creatorTimer.Change(10, 0);
} 
Run Code Online (Sandbox Code Playgroud)

MSDN声明在线程池的单独线程中调用回调方法(每次定时器触发).这意味着如果我停止计时器方法中的第一件事它仍然不会阻止计时器触发并在第一个有机会停止计时器之前运行该方法的另一个实例.

也许应该锁定计时器(甚至是非重入方法本身)?在执行其回调(和非重入)方法期间阻止计时器触发的正确方法是什么?

c# timer callback reentrancy

16
推荐指数
2
解决办法
3万
查看次数

C#中的可选委托

这是两个扩展方法重载的简单示例

public static class Extended 
{
    public static IEnumerable<int> Even(this List<int> numbers)
    {
        return numbers.Where(num=> num % 2 == 0);
    }

    public static IEnumerable<int> Even(this List<int> numbers, Predicate<int> predicate)
    {
        return numbers.Where(num=> num % 2 == 0 && predicate(num));
    }
}
Run Code Online (Sandbox Code Playgroud)

通过将委托设置为可选,我希望能够将它们合并为一个:

public static class Extended 
{
    public static IEnumerable<int> Even(this List<int> numbers, Predicate<in> predicate = alwaysTrue)
    {
        return numbers.Where(num=> num % 2 == 0 && predicate(num));
    }

    public static bool alwaysTrue(int a) { return true; }
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器会抛出错误:

'predicate'的默认参数值必须是编译时常量 …

c# delegates optional-parameters c#-4.0

15
推荐指数
1
解决办法
5945
查看次数

为什么IEnumerable(T)不被接受为扩展方法接收器

代码前的完整问题:

为什么IEnumerable<T> where T : ITest不接受期望的扩展方法的接收者this IEnumerable<ITest>

现在代码:

我有三种类型:

public interface ITest { }
public class Element : ITest { }
public class ElementInfo : ITest { }
Run Code Online (Sandbox Code Playgroud)

还有两种扩展方法:

public static class Extensions
{
    public static IEnumerable<ElementInfo> Method<T>(
        this IEnumerable<T> collection) 
        where T : ITest
    {
?        return collection.ToInfoObjects();
    }

    public static IEnumerable<ElementInfo> ToInfoObjects(
        this IEnumerable<ITest> collection)
    {
        return collection.Select(item => new ElementInfo());
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的编译器错误(在标记的行上):

CS1929:'IEnumerable<T>'不包含定义,'ToInfoObjects'并且最好的扩展方法重载 …

.net c# generics extension-methods type-inference

15
推荐指数
1
解决办法
9416
查看次数

有趣的"参考参考"功能,任何解决方法?

我想知道是否有任何类似的东西可以用于价值类型......

public static class ExtensionMethods {
    public static void SetTo(this Boolean source, params Boolean[] bools) {
        for (int i = 0; i < bools.Length; i++) {
            bools[i] = source;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么这是可能的:

Boolean a = true, b, c = true, d = true, e;
b.SetTo(a, c, d, e);
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为bools是一个值类型,因此它们作为值传递给函数,而不是作为引用.

除了将值类型包装到引用类型中(通过创建另一个类),有没有办法在使用params修饰符时通过引用(ref)将变量传递给函数?

c# extension-methods reference params

12
推荐指数
1
解决办法
5876
查看次数