小编bia*_*bit的帖子

用C#代码更改WPF窗口背景图像

我有几个图像配置为应用程序资源.

当我的应用程序启动时,主窗口的背景是通过XAML设置的:

<Window.Background>
    <ImageBrush ImageSource="/myapp;component/Images/icon.png" />
</Window.Background>
Run Code Online (Sandbox Code Playgroud)

如果发生给定事件,我想将此背景更改为另一个资源("/myapp;component/Images/icon_gray.png").

我尝试过使用两个常量:

private static readonly ImageBrush ENABLED_BACKGROUND =
    new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon.png")));
private static readonly ImageBrush DISABLED_BACKGROUND =
    new ImageBrush(new BitmapImage(new Uri("/myapp;component/Images/icon_gray.png")));
Run Code Online (Sandbox Code Playgroud)

...但很自然地,我得到一个带有无效URI的例外.

有没有一种简单的方法来this.Background = ...使用包Uri或资源(即:) 更改WPF窗口的背景图像(via Myapp.Properties.Resources.icon)?

c# wpf background-image

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

适当的Java RTP/RTCP堆栈

我一直在努力为Java找到一个像样的RTP堆栈实现.JMF或FMJ不是这里的选项,因为我不希望编解码器和音频/视频捕获的所有花俏!我只需要创建RTP流,在其中转储数据并从中读取数据.

我一直在使用jlibrtp,但它的API很阴暗,日志记录基于System.out,偶尔我会得到几个NPE.

此外,RTCP支持会很好(再次,我想自己处理控件,我只需要API).

总结一下:

  • 清洁API;
  • "手动"数据处理;
  • 体面的伐木;
  • RTCP支持;
  • 没有依赖;
  • 针对服务器端使用进行了优化(许多RTP会话在给定时刻处于活动状态).

是否有这样的图书馆或我必须编码一个?;)

java stack rtp

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

C#WPF如何强制执行单个windows实例

我想知道在WPF中为每个应用程序提供给定Window的单个实例的最佳方法(阅读最优雅)是什么.

我是.NET和WPF的新手,我想出的东西看起来很蹩脚.

private static readonly Object MUTEX = new Object();
private static AboutWindow INSTANCE;

public static AboutWindow GetOrCreate() {
    lock (MUTEX) {
        if (INSTANCE == null) {
            INSTANCE = new AboutWindow();
        }
        INSTANCE.Show();
        return INSTANCE;
    }
}

private AboutWindow() {
    InitializeComponent();
}

private void AboutWindow_Closed(object sender, EventArgs e) {
    // the Closed events are handy for me to update values across
    // different windows.
    lock (MUTEX) {
        INSTANCE = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

事情是......这看起来像完全废话.必须有一些方法以更优雅的方式实现同​​一目标,对吗?

PS:我经常使用该Closed事件来更改其他打开窗口中的值.例如,我有SettingsWindow和"帐户"按钮.当我按下该按钮时,弹出 …

c# wpf singleton window

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

在iOS 5上使用libcurl作为NSURLConnection的替代方案

更新:NSURLConnection现在似乎正确支持100-Continue.在任何情况下,此答案都包含指向用于为iOS/OSX构建libcurl的脚本的链接.

NSURLConnection考虑到它不支持RFC 2616(HTTP/1.1)的8.2.3节,我有点困难.

基本上客户端需要能够支持发送标头Expect: 100-Continue; 在发送请求标头之后,它必须100在发送POST/ PUTbody 之前等待来自具有状态代码的服务器的响应.

此外,NSURLConnection(并且因此构建在其上的所有库)在上传所有数据之前不会从服务器返回任何响应 - 这是一个痛苦,因为服务器可能立即拒绝上载(无效凭证,没有空格,文件太大了等).虽然它对小文件"工作"(内容完全上传,并且调用了响应的委托方法),但在大文件上而不是从服务器获取错误响应(我肯定会发送它),我只是得到一个"连接失败"错误.

我知道libcurl正确支持100-Continue规范所以我需要一些帮助来编译它并在iOS 5项目上运行它.

我从这篇文章开始(滚动到底部)但我无法走远...

做出这些改变......

export CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2
export CFLAGS="-arch armv7 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk"
export CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-cpp-4.2
export AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar
./configure --disable-shared --without-ssl --without-libssh2 --without-ca-bundle --without-ldap --disable-ldap --host=arm-apple-darwin10 --build=arm-apple-darwin10
make clean
make
ar rv libcurl.armv7.a lib/*.o
Run Code Online (Sandbox Code Playgroud)

...但编译因消息而失败

(...)
checking for arm-apple-darwin10-gcc... /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2
checking whether the C compiler works... no
configure: error: in …
Run Code Online (Sandbox Code Playgroud)

libcurl nsurlconnection ios5

11
推荐指数
2
解决办法
7598
查看次数

新操作符与Java中newInstance()的性能

newInstance()在代码的一个性能关键区域中使用.方法签名是:

<T extends SomethingElse> T create(Class<T> clasz)

Something.class作为参数传递,我得到了一个SomethingElse创建的实例newInstance().

今天我从列表中回过头来清除这个性能TODO,所以我运行了几个new运算符对的测试newInstance().我对性能损失感到非常惊讶newInstance().

我在这里写了一些关于它的内容:http://biasedbit.com/new-vs-newinstance/

(抱歉自我推销......我会在这里放置文字,但这个问题会不成比例.)

我想知道的是,-server当创建的对象数量大幅增加而不是"低"值(例如100或1000)时,为什么标志会提供这样的性能提升.

我确实从整个思考过程中吸取了教训,这只是对JVM在运行时执行的优化的好奇心,特别是对于-server标志.另外,如果我在测试中做错了什么,我会很感激您的反馈!


编辑:我添加了一个预热阶段,结果现在更加稳定.感谢您的投入!

java reflection performance instantiation

10
推荐指数
1
解决办法
6937
查看次数

使用SBT中的类路径创建脚本

我想让SBT创建一个文件并为特定阶段编写项目的运行时完整类路径(scala,托管和非托管库,项目类)(在本例中,仅用于compile).

我试图复制我用Maven做的事情,使用maven-antrun-plugin:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <version>1.6</version>
      <executions>
        <execution>
          <id>generate-runner</id>
          <phase>package</phase>
          <configuration>
            <target>
              <property name="runtime_classpath" refid="maven.runtime.classpath" />
              <property name="runtime_entrypoint" value="com.biasedbit.webserver.Bootstrap" />

              <echo file="../../bin/run-server.sh" append="false">#!/bin/sh
java -classpath ${runtime_classpath} ${runtime_entrypoint} $$*
              </echo>
            </target>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

我怎么能用SBT做到这一点?

scala classpath sbt

10
推荐指数
1
解决办法
3600
查看次数

C#WPF抓取截图与SnippingTool效果

我正在尝试在我的WPF应用程序中集成屏幕截图抓取功能,我希望它看起来像剪切工具.

到目前为止,我通过创建一个不透明度设置为0.5和深色背景的全屏窗口(带有画布)来实现类似的功能.当我单击某处并开始拖动时,会绘制一个白色矩形,生成类似于的效果.

我想要的是该矩形的内部部分在背景画布中打开一个不透明孔,这样我就可以看到所选区域 - 就像剪切工具一样.

问题是,作为.NET的新手,我不知道如何或从哪里开始.对屏幕截图窗口的OpacityMask字段进行了一些研究和测试,但无处可去.

这是一个显示当前效果的小视频.

编辑:此外,作为奖金问题,是否有一种简单的方法来获取跨越多个监视器(虚拟屏幕)的屏幕截图?Graphics.CopyFromScreen()似乎只适用于1个屏幕.
已经修复了这个并且似乎适用于所有可能的奇怪的虚拟桌面布局:

// Capture screenie (rectangle is the area previously selected
double left = Canvas.GetLeft(this.rectangle);
double top = Canvas.GetTop(this.rectangle);

// Calculate left/top offset regarding to primary screen (where the app runs)
var virtualDisplay = System.Windows.Forms.SystemInformation.VirtualScreen;
var primaryScreen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
if (virtualDisplay.Left < primaryScreen.Left)
{
    left -= Math.Abs(virtualDisplay.Left - primaryScreen.Left);
}
if (virtualDisplay.Top < primaryScreen.Top)
{
    top -= Math.Abs(virtualDisplay.Top - primaryScreen.Top);
}
Run Code Online (Sandbox Code Playgroud)

c# wpf screenshot opacitymask

8
推荐指数
1
解决办法
3210
查看次数

HTML5拖放 - 检测Safari中的文件夹(FileList,File)

我在JS(AJAX POST)中设置了一个拖放文件上传脚本,我在Safari中过滤文件夹时遇到了困难 - 版本5.0.3(6533.19.4).

每当我将多个文件/文件夹放入浏览器时,Chrome都会过滤掉这些文件夹,而Firefox会返回0,.size因此保护这些文件无关紧要.但是,Safari将返回一个68字节的文件(文件夹的大小).

有没有办法测试这个File(项目FileList)是否是一个文件夹?似乎无法在File/Blob API中找到测试此条件的任何内容(尝试没有意义.type,因为它不会为未知文件和文件夹返回任何内容......)

更多信息:

基本上发生的是AJAX请求有一个空体.我正在上传FormData:

var file = ...; // the dropped file
var formData = new FormData();
formData.append("file", file);
var xhr = new XMLHttpRequest();
...
xhr.send(formData);
Run Code Online (Sandbox Code Playgroud)

directory safari html5 drag-and-drop filter

8
推荐指数
1
解决办法
2723
查看次数

AtomicBoolean vs synchronized块

我试图通过替换一些synchronized块来减少代码中的线程争用AtomicBoolean.

这是一个例子synchronized:

public void toggleCondition() {
    synchronized (this.mutex) {
        if (this.toggled) {
            return;
        }

        this.toggled = true;
        // do other stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

替代方案AtomicBoolean:

public void toggleCondition() {
    if (!this.condition.getAndSet(true)) {
        // do other stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

利用AtomicBooleanCAS的属性应该比依赖同步更快,所以我运行了一些微基准测试.

对于10个并发线程和1000000次迭代,AtomicBoolean只比synchronized块快一点.

使用AtomicBoolean:0.0338在toggleCondition()上花费的平均时间(每个线程)

使用synchronized:0.0357在toggleCondition()上花费的平均时间(每个线程)

我知道微基准值得他们值得,但差异不应该更高吗?

java synchronized-block atomicboolean

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

在异步WebClient请求中获取HTTP标头

我正在使用System.Net.WebClient异步模式执行一些HTTP操作.使用异步操作的原因最重要的是,我获得了进度更改指示 - 这仅适用于异步操作,如文档所述.

所以,假设我已经设置了WebClient:

this.client = new WebClient();
this.client.UploadStringCompleted +=
    new UploadStringCompletedEventHandler(textUploadComplete);
Run Code Online (Sandbox Code Playgroud)

和代表:

private void textUploadComplete(Object sender, UploadStringCompletedEventArgs e)
{
    if (e.Error != null)
    {
        // trigger UI failure notification
        return;
    }

    // FIXME not checking for response code == 200 (OK)
    // trigger UI success notification
}
Run Code Online (Sandbox Code Playgroud)

所以你看,我假设如果没有引发异常,请求总是成功的(可能不是这种情况,因为HTTP响应状态代码可以是!= 2xx).从UploadFileAsync的文档中我无法判断是否也处理了非200响应.

我是C#的新手,我似乎无法找到一种方法来访问特定异步请求响应的标头.在我看来,每个人WebClient只能在任何给定时间持有响应(或一组标题).

虽然我不会同时执行多个并行请求,但我仍然想知道是否有更优雅的方法来检索特定请求的响应头/状态代码,而不是必须获取"最后一个- 可用的"来自的回应WebClient.

谢谢.

c# asynchronous webclient http

6
推荐指数
1
解决办法
4436
查看次数

在Objective-C中使用块内的块:EXC_BAD_ACCESS

使用iOS 5的新TWRequestAPI,我遇到了与块使用相关的砖墙.

我需要做的是在收到第一个请求的成功响应后,立即触发另一个请求.在第二个请求的完成块上,然后我通知多步操作的成功或失败.

这大致是我正在做的事情:

- (void)doRequests
{
    TWRequest* firstRequest = [self createFirstRequest];
    [firstRequest performRequestWithHandler:^(NSData* responseData,
                                              NSHTTPURLResponse* response,
                                              NSError* error) {
        // Error handling hidden for the sake of brevity...
        TWRequest* secondRequest = [self createSecondRequest];
        [secondRequest performRequestWithHandler:^(NSData* a,
                                                   NSHTTPURLResponse* b,
                                                   NSError* c) {
            // Notify of success or failure - never reaches this far
        }];
    }];
}
Run Code Online (Sandbox Code Playgroud)

我没有保留任何一个请求或在任何地方保留对它们的引用; 这只是一场千载难关.

但是,当我运行应用程序时,它会崩溃EXC_BAD_ACCESS:

[secondRequest performRequestWithHandler:...];
Run Code Online (Sandbox Code Playgroud)

它执行第一个请求就好了,但是当我尝试使用处理程序启动第二个请求时,它会崩溃.这段代码出了什么问题?


创建请求的方法非常简单:

- (TWRequest*)createFirstRequest
{
    NSString* target   = @"https://api.twitter.com/1/statuses/home_timeline.json";
    NSURL* url         = [NSURL URLWithString:target];
    TWRequest* …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch objective-c uikit objective-c-blocks twrequest

6
推荐指数
1
解决办法
1614
查看次数

将文件/文本拖放到托盘图标(C#,WindowsForms)

我正在尝试允许拖放到我的应用程序上的托盘图标.

我知道用更高级别的C#WindowsForms API做这件事是不可能的,因为NotifyIcon它不支持拖动事件.

所以在一位经验丰富的Windows朋友的帮助下,我开始尝试通过Win32 API.想法是在托盘窗口处理程序中注册一个钩子(在DragAcceptFiles(hWnd,TRUE);"SysPager"窗口处理程序上设置之后).

挂钩和下降部分正在从托盘到DLL工作.

LRESULT CALLBACK myHookProc (int code, WPARAM wParam, LPARAM lParam){
  if (code == HC_ACTION)
  {
    PMSG msg = (PMSG) lParam;
    switch(msg->message){
      case WM_DROPFILES:
        ::MessageBox(NULL, L"Dropped files!", L"Test", MB_OK);
        // call my app's registered hook
        break;
  }
  return CallNextHookEx(oldHookProc, code, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我弹出了消息框.

问题是我现在需要在我的C#(WindowsForms)应用程序上调用一个函数来通知这个事件.这是我遇到砖墙的地方.

当我从DLL中的应用程序注册回调时,我存储它; 但是当myHookProc被调用时,它的值为NULL.

事实证明我误解了DLL是如何工作的; 没有我的应用程序和托盘区(他们复制或每个人都有自己的"实例",如果你可以调用它的),所以我不能使用任何静态变量或类似的东西,以保持之间的共享实例回调参考回到我的应用程序.

花了几个小时研究这一点,唯一的解决办法似乎是共享内存(试过#pragma data_seg我跑进一些论坛,但都无济于事),但它开始觉得太矫枉过正的这种"简单"的用例.

所以百万美元的问题是:

  1. 是否真的有必要将挂钩卸载到DLL?
  2. 我真的需要求助于共享内存才能实现这一目标吗?
  3. (奖金问题)WM_DROPFILES仅适用于文件; 如何为文本触发drop事件?

请记住这是我第一次使用.NET,C#和Win32(不到一周); 解释原因的详细解答 - 而不仅仅是陈述 - 将不胜感激!

谢谢.

dll hook winapi drag-and-drop system-tray

5
推荐指数
1
解决办法
1921
查看次数